我的DLL是用VC建立的win32 dll工程
我用下面的方法在DLL里声明了一个函数
extern "C" _declspec(dllexport) bool WINAPI SetData (char *ch1, char *ch2);bool WINAPI SetData(char *ch1, char *ch2)
{
......
}在另一个程序里用如下方法调用,但SetData总是返回NULL,我不加WINAPI就可以,这是为什么?
typedef bool (WINAPI SETDATA)(char *ch1, char* ch2);
SETDATA *SetData;
hInstance = ::LoadLibrary("test.dll");
if(hInstance == NULL) {
MessageBox("load dll error");
return false; 
} SetData = (WINAPI SETDATA *)::GetProcAddress(hInstance, "SetData"); 
         if(SetData == NULL)
             return false;

解决方案 »

  1.   

    GetLastError 看看...SetData = (WINAPI SETDATA *)::GetProcAddress(hInstance, "SetData"); 不用WINAPI了吧 這裡...偶是比較喜歡typedef bool (WINAPI *SETDATA)(char *ch1, char* ch2);
      

  2.   

    有可能是调用约定的一些问题,可以参考:
    http://dev.csdn.net/develop/article/25/25141.shtm
    http://dev.csdn.net/develop/article/25/25142.shtm
    http://dev.csdn.net/develop/article/25/25143.shtm
    http://dev.csdn.net/develop/article/31/31511.shtm
    http://dev.csdn.net/develop/article/52/52485.shtm
      

  3.   

    extern "C" _declspec(dllexport) bool WINAPI SetData (char *ch1, char *ch2);
    这个声明有问题吧
      

  4.   

    不好意思,
    SetData = (WINAPI SETDATA *)::GetProcAddress(hInstance, "SetData"); 
    这一条是笔误,这样做的话编译通不过的,应该为
    SetData = (SETDATA *)::GetProcAddress(hInstance, "SetData"); To tyzyx:
    这样声明有错误,错在哪儿?
      

  5.   

    extern "C" _declspec(dllexport) bool WINAPI SetData (char *ch1, char *ch2);
    这么定义是为了...
      

  6.   

    为什么不这样定义
    extern "C" _declspec(dllexport) bool SetData (char *ch1, char *ch2);