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"
看你的用法应该没有问题,会不会是Dll是Debug版问题。
再把你的库编译成release版的试试。
你用了相对路径,这个DLL是在系统路径里面吗?
class CString
{
public:
...
#ifdef _DEBUG
friend CDumpContext& AFXAPI operator<<(CDumpContext& dc,
const CString& string);
#endif
...
}是不是这个原因?
会不会因为CyTangTP.dll 是用DEBUG VERSION编译的?
我应该怎么办?
{
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 版的原因。有什么办法能确定一下?
有什么办法能确定一下CyTangTP.dll是DEBUG 版还是RELEASE版?
该DLL是用DELPHI写的,参数定义为String型,因而使用C++的CString参数类型不一致。至于为什么DEBUG版本不报错而RELEASE版本报错就不得而知了。