dll有两种形式的DllMain:
BOOL APIENTRY DllMain( HANDLE hModule, //HANDLE类型
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
 )
BOOL WINAPI DllMain(
  HINSTANCE hinstDLL,  // HINSTANCE类型
  DWORD fdwReason,     // reason for calling function
  LPVOID lpvReserved   // reserved
);
请问他们有什么区别?要在上面的HANDLE中,怎样取得实例句柄?还有,我写的Dll为什么不能导出函数呢?
 bool _declspec(dllexport) WINAPI InstallHook(HWND Handle,long Msg);
在BCB中调用时:
        dll=LoadLibrary("hook.dll");//成功
        if (dll==NULL)
        {
                MessageBox(Handle,"不能加载Dll","Error",MB_ICONERROR);
                Application->Terminate();
                return;
        }
        InstallHook_=(void (_stdcall*)(HWND _hWnd ,long _Message))
                GetProcAddress(dll,"InstallHook");
        if (InstallHook_==NULL)//在此总是取不到InstallHook的地址
        {
                MessageBox(Handle,"不能得到函数地址","Error",MB_ICONERROR);
                FreeLibrary(dll);
                Application->Terminate();
                return;
        }
        InstallHook_(Handle,WM_MYUSER);
请各位指教,先谢谢了
我的E-Mail:[email protected]

解决方案 »

  1.   

    msdn不是说_declspec(dllexport) 声明就可以不用在def中声明了?
      

  2.   

    要想到出函数,在VC6下应该在.def文件中声明你的函数。
      

  3.   

    1.
    .def
    LIBRARY "xxx"
    EXPORTS
    InstallHook
    2.
    bool WINAPI InstallHook(HWND Handle,long Msg);
      

  4.   

    谢谢,函数可以正常导出了
    可是以下的DLLMain中的参数是什么意思啊?
    BOOL APIENTRY DllMain( HANDLE hModule, //HANDLE类型
                           DWORD  ul_reason_for_call, 
                           LPVOID lpReserved
     )
    BOOL WINAPI DllMain(
      HINSTANCE hinstDLL,  // HINSTANCE类型
      DWORD fdwReason,     // reason for calling function
      LPVOID lpvReserved   // reserved
    );
    这两个参数怎么回不同类型?
    HANDLE hModule, //HANDLE类型
    HINSTANCE hinstDLL,  // HINSTANCE类型
    HANDLE类型参数有什么用?