动态库代码如下:
int g_nChanType = 0;
int g_nMyType= 0;
int g_nMyID= 0;
int g_nDestType= 0;
int g_nDestID= 0;
CString g_szCh = _T("");extern "C" __declspec(dllexport) void Init(int nChanType, int nMyType, int nMyID, int nDestType, int nDestID, CString szCh)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
g_nChanType = nChanType;
g_nMyType = nMyType;
g_nMyID = nMyID;
g_nDestType = nDestType;
g_nDestID = nDestID;
g_szCh = szCh;
}调用代码如下:
{ typedef void (WINAPI * TESTDLL)(int, int, int, int, int, CString); HINSTANCE hmod;
hmod = ::LoadLibrary ("MyDll.dll");
if(hmod==NULL)
{
AfxMessageBox("Fail");
}
TESTDLL lpproc; lpproc = (TESTDLL)GetProcAddress(hmod, "Init");
if(lpproc!=(TESTDLL)NULL)
(*lpproc)(3, 11, 1, 12, 1, "B:A"); FreeLibrary(hmod);
}FreeLibrary以后出错,弹出终止、重试、忽略对话框,很郁闷,望大虾指点,解决后立即给分,谢谢大家!

解决方案 »

  1.   

    typedef void (WINAPI * TESTDLL)改成:
    typedef void (* TESTDLL)(*lpproc)(3, 11, 1, 12, 1, "B:A")改成:
    lpproc(3, 11, 1, 12, 1, "B:A")
      

  2.   

    函数指针使用不对:
    (*lpproc)(3, 11, 1, 12, 1, "B:A");
    ==>
    lpproc(3, 11, 1, 12, 1, "B:A");
      

  3.   

    我试了一下,去掉WINAPI以后就可以了,至于下面有没有*号都能成功,各位大侠想请教一下WINAPI又是做何用的
      

  4.   

    由于你的Dll中没有定义WINAPI,所以Dll编译时是按照__cdecl编译的,结果在你使用时又声明为WINAPI方式,所以当然错误了。
    好的习惯是在Dll的函数中增加WINAPI的声明