typedef ( WINAPI *SendMsgFunc)(int hHandle, CString *s1, CString * s2);int WINAPI  SendMsgA(int hHandle ,PSZ  sFmt,PSZ sMsg )
{
    int iRet;    CString* Fmt= new CString(sFmt);
    CString* Msg= new CString(sMsg);     SendMsgFunc f;
     MessageBox(NULL,"OK!","",MB_OK);
     HMODULE h = LoadLibrary("CyTangTP.dll");
 f = (SendMsgFunc)GetProcAddress(h, "SendMsg");
     iRet = (*f)(hHandle, Fmt, Msg );  free(Fmt);
 free(Msg); 
      MessageBox(NULL,"finish!","",MB_OK);
 return iRet;
}
为什么我编译的DEBUG VERSION运行没有问题,而RELEASE VERSION运行报错?
RELEASE版本先出现MESSAGEBOX("ok"),然后出现错误提示信息" Error calling external function %s"

解决方案 »

  1.   

    找ifdef _DEBUG宏,查看它是不是有地方写错位置了
      

  2.   

    你的DLL是不是Debug版?
    看你的用法应该没有问题,会不会是Dll是Debug版问题。
      

  3.   

    你调用的库很可能是debug版的,和你用时的release版不兼容。
    再把你的库编译成release版的试试。
      

  4.   

    对阿,你的DLL是 debug 还是 release
      

  5.   

    LoadLibrary成功了吗?代码中都不判断一下。
    你用了相对路径,这个DLL是在系统路径里面吗?
      

  6.   

    在CString类的定义中发现如下代码:
    class CString
    {
    public:
    ...
    #ifdef _DEBUG
    friend CDumpContext& AFXAPI operator<<(CDumpContext& dc,
    const CString& string);
    #endif
    ...
    }是不是这个原因?
    会不会因为CyTangTP.dll 是用DEBUG VERSION编译的?
    我应该怎么办?
      

  7.   

    你的def里没有导出那个函数吧
      

  8.   

    typedef ( WINAPI *SendMsgFunc)(int hHandle, CString *s1, CString * s2);int WINAPI  SendMsgA(int hHandle ,PSZ  sFmt,PSZ sMsg )
    {
        int iRet; CString* Fmt= new CString(sFmt);
        CString* Msg= new CString(sMsg);     SendMsgFunc f;     HMODULE h = LoadLibrary("CyTangTP.dll");
     assert(h);
     f = (SendMsgFunc)GetProcAddress(h, "SendMsg");
     assert(f);
         MessageBox(NULL,"OK!","",MB_OK);
         iRet = (*f)(hHandle, Fmt, Msg );  free(Fmt);
     free(Msg); 
          MessageBox(NULL,"finish!","",MB_OK);
     return iRet;
    }可以出现MESSAGEBOX ("OK")
    是不是可以断定 LoadLibrary和GetProcAddress没有问题呢。
    我觉得还是因为CyTangTP.dll 是DEBUG 版的原因。有什么办法能确定一下?
      

  9.   

    CyTangTP.dll 不是我写的,而是厂家提供的。
    有什么办法能确定一下CyTangTP.dll是DEBUG 版还是RELEASE版?
      

  10.   

    厂家提供debug版?直接问厂家不就可以了?
      

  11.   

    你还没有FreeLibrary区分debug和realese就看大小就行了,debug的要大很多的。
      

  12.   

    LoadLibrary和GetProcAddress没有问题,否则出现的不是这样的错误信息,这个错误像是CyTangTP.dll显示的,你确认一下与该DLL有关的文件是否都已复制到相应的位置,有可能某些文件只复制到了Debug目录而没有复制到Release目录。
      

  13.   

    问题搞定:
       该DLL是用DELPHI写的,参数定义为String型,因而使用C++的CString参数类型不一致。至于为什么DEBUG版本不报错而RELEASE版本报错就不得而知了。