显示调用第三方DLL,出现这样的错误

andy0618 2008-11-27 04:48:32


The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.

源代码如下

int CFybjCtrl::OCXinit_port(LPCTSTR str)
{
typedef HANDLE(_stdcall *lpAddFun)(char *portname); //宏定义函数指针类型
lpAddFun addFun;//函数指针
hDll = LoadLibrary("..//Multi.dll");//加载DLL
if (hDll != NULL)

{

addFun = (lpAddFun)GetProcAddress(hDll, "init_port");

if (addFun != NULL)

{

hand = addFun((char *)str);//根据接口定入传参、返回

//printf("%d", result);

}
FreeLibrary(hDll);

}



if(hand==NULL || hand<0)
{

//AfxMessageBox("串口1连接失败!");
return -1;
}
else //the comm port open successfully
{

//AfxMessageBox("串口1打开成功!");
return 1;
}


}
...全文
70 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
糊里糊涂 2008-11-28
  • 打赏
  • 举报
回复
应该是__stdcall,__cdecl,__fastcall,thiscall,naked call 这种问题。
cnzdgs 2008-11-27
  • 打赏
  • 举报
回复
函数原形是怎么写的?
这样试试:
typedef HANDLE(_stdcall *lpAddFun)(char *portname);
oyljerry 2008-11-27
  • 打赏
  • 举报
回复
相对或绝对路径。 ..\\Multi.dll
andy0618 2008-11-27
  • 打赏
  • 举报
回复
hDll = LoadLibrary("..//Multi.dll");//加载DLL

再问一下,这个dll的路经该怎么写,我是写的ACTIVEX控件,第三方的DLL如何调用呢
oyljerry 2008-11-27
  • 打赏
  • 举报
回复
configuration property-》c++ -> Calling conversion
oyljerry 2008-11-27
  • 打赏
  • 举报
回复
call conversion 不一致,两个project的不一样,查看一下调用工程中的call conversion

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧