|
임프랍니다.
현재 프로세스에 특정 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이 실행중인지 아닌지를 확인할려구 합니다.
: 확인하는 방법을 좀 알려주세요..
: 고수님들 답변 부탁합니다.
|