首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

最近给别的公司做一个接口程序,那公司给一个DLL和一个说明文档,各种调用失败

2013-07-09 
最近给别的公司做一个接口程序,那公司给一个DLL和一个说明文档,各种调用失败求助!然后我把代码改了,就按错

最近给别的公司做一个接口程序,那公司给一个DLL和一个说明文档,各种调用失败求助!

然后我把代码改了,就按错误提示 他好像是想要char类型的参数,如下

int _tmain(int argc, _TCHAR* argv[])
{

typedef int (* DLLWITHLIB )(char a);
DLLWITHLIB pfFuncInDll = NULL;

    HINSTANCE hinst=::LoadLibrary("XNHInterface"); 
    if (NULL != hinst)
    {
       cout<<"dll loaded!"<<endl;
    }

pfFuncInDll = (DLLWITHLIB)GetProcAddress(hinst, "netPing");

 if (NULL != pfFuncInDll)
    {  
         char s='1';
 
 int a; //定义int a用于接收函数的返回信息
         a=(*pfFuncInDll)(s);  
 cout<<a<<endl;
   
    }
}


这时候编译的时候不提示错误,但是运行的时候出错如下图
最近给别的公司做一个接口程序,那公司给一个DLL和一个说明文档,各种调用失败
各种想不通 这netPing函数到底该怎么调用啊。
win32 dll c++
[解决办法]

引用:
Quote: 引用:

函数原型都写错了:
typedef int (* DLLWITHLIB )(char a);
人家的参数是 char* 呀

typedef int (* DLLWITHLIB )(char* a);

才对.

另外, 注意调用方式是 stdcall 还是 C call 的.
改成char *之后编译弹这个框
Run-Time Check Failure #0 - 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.
看起来好像是你说的调用约定什么的,不太明白


然后你怎么传参数给它的?
注意传给它的 char 数组必须以 0 结尾的才算是字符串哦.

调用约定就是怎么传参, 谁来平栈的约定.
如果你确认参数没问题而, 试试把声明改成:
typedef int  (__stdcall*DLLWITHLIB )(char* a);
用 stdcall 的调用方式试一下.

热点排行