Delphi做的dll,使用在c++环境中,
LoadLibrary调用成功,但GetProcAddress返回失败,为何?

解决方案 »

  1.   

    LPFNDLLFUNC1 lpfnDllFunc1; dllhinst=LoadLibrary("ktr");
    if (dllhinst!=NULL)
    {
    lpfnDllFunc1=(LPFNDLLFUNC1)GetProcAddress(dllhinst, "SetKbHook");
    if (!lpfnDllFunc1)
    {
    FreeLibrary(dllhinst);
    error=TRUE;
    }
          else
    {
         lpfnDllFunc1(); 
    }
    }
      

  2.   

    给你提议点建议,你失败的原因是,在C++中找不到改函数的标记地址符所至,我不知道DEPHI里有没有EXTERN之类的关键值,如果有在每一个函数前加上该关键值就没问题,下面是在C中的情况,DLL中的函数声明如下
    extern return_type Function(Parameter list...)
    {
    ....
    }
      

  3.   

    函数指针要定义为
    WINAPI*如
    函数指针要定义为
    WINAPI*如
    HINSTANCE m_hDll;void (WINAPI * m_pfnDllDemo)(char *ip,int port);BOOL CMyDll::LoadDll()
    {
    CString path;
    m_hDll = AfxLoadLibrary("c:\\xxx.dll");
    if(!m_hDll){
        return FALSE;
    }
    m_pfnDllDemo = (void (WINAPI *)(char *ip,int port)) GetProcAddress(m_hDll ,"DllDemo");

    return TRUE;
    }