|
해봤는데요. 제가 로드하는 dll은
DllMainFormShow(AnsiString) 처럼 AnsiString을 쓰거든요.
그런데 해보니깐 서로 타입이 안맞다고 에러가 떠요. AsnsiString은 수정을 할수가 없는 거거든요.
어떻게 해결할수 있는 방법이 없나여?
꼭 답변 부탁합니다.
박지훈.임프 님이 쓰신 글 :
: 임프랍니다.
:
: 현재 프로세스에 특정 dll이 로드되었는지를 검사하려면 Win32 API 함수인 GetModuleHandle()을 쓰면 됩니다.
: 이 함수의 인자로 dll 이름을 넘겨주면 현재 로드된 인스턴스의 핸들을 돌려주는데, 만약 해당 dll이 로드
: 되지 않았다면 NULL을 리턴합니다.
:
: 이걸 이용해서 간단한 예제를 만들어봤습니다.
: 다음은 빌더에 포함된 패키지들 중 현재 로드된 bpl들을 알아내는 예제입니다.
: 먼저 빈 프로젝트의 빈 폼에 리스트박스 하나와 버튼 하나를 놓고, 버튼의 OnClick 이벤트 핸들러에서
: 다음과 같이 코딩하세요.
:
: void __fastcall TForm2::Button1Click(TObject *Sender)
: {
: char *Dlls[] = {"Vcl50.bpl", "Vclx50.bpl", "bcbsmp50.bpl", "Vcldb50.bpl",
: "vclado50.bpl", "ibsmp50.bpl", "VCLBDE50.bpl", "vcldbx50.bpl",
: "Qrpt50.bpl", "TeeUI50.bpl", "TeeDB50.bpl", "Tee50.bpl",
: "Dss50.bpl", "TeeQR50.bpl", "VCLIB50.bpl", "Vclmid50.bpl",
: "vclie50.bpl", "Inetdb50.bpl", "Inet50.bpl", "NMFast50.bpl",
: "webmid50.bpl", "dclocx50.bpl", "bcb2kaxserver50.bpl",
: "bcbie50.bpl", "Indy50"};
: for(int i=0; i<sizeof(Dlls)/sizeof(char *); i++)
: {
: HMODULE hModule = GetModuleHandle(Dlls[i]);
: ListBox1->Items->Add(AnsiString(Dlls[i]) + " : " + (hModule?"Loaded":"Not Loaded"));
: }
: }
:
: 이 예제 코드를 이용하면 프로젝트에서 bpl을 빼고 빌드하셨을 경우 함께 배포해야 하는 bpl이 무엇무엇인지
: 알아낼 수 있습니다.
:
: 그럼 이만...
:
:
: ppiri 님이 쓰신 글 :
: : 프로젝트에서 메모리를 통해 dll이 실행중인지 아닌지를 확인할려구 합니다.
: : 확인하는 방법을 좀 알려주세요..
: : 고수님들 답변 부탁합니다.
|