c++调用C静态库函数时,参数传递问题?(急求解)

cstone40 2017-03-10 10:45:18
我在VS2012(安装了QT for vs2012)上开发QT程序时,调用了一个静态函数库中的一个函数,此函数只需要一个参数,然而在调试过程中,通过反汇编发现,在调用时向堆栈传递了2个参数,第一个push为所需参数,第二个为异常参数,如下所示:

74: char* pip = "192.168.110.35";
00D04190 mov dword ptr [pip],0D1D5CCh

75: pj_str_t s = pj_str(pip);;//pj_str为静态函数库中的函数,需要一个参数
00D04197 mov eax,dword ptr [pip]
00D0419A push eax //第一个参数为争取参数
00D0419B lea ecx,[ebp-0A8h]
00D041A1 push ecx //异常参数????????????
00D041A2 call pj_str (0D08D50h)
...全文
370 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
GKatHere 2017-03-25
  • 打赏
  • 举报
回复
引用 2 楼 cstone40 的回复:
针对楼上兄弟的疑问解答如下: 1、没有重载,因为是C编写的函数库,因此应该不存在重载问题; 2、该静态库中的函数pj_str(char* p)在非Qt的vs2012环境下编写的控制台函数,能够正确运行;只是在Qt环境下才出现错误,因此应该不存在有默认参数,即有同样函数名且需两个参数; 3、不管前面是否有其他函数,在Qt下编译都存在错误。 求专家继续求解!!!!!!!!!
呵呵,这是个返回结构的引用作参数传递进去的问题 NRV,named return value 优化,也可见它。 如:

// fac没有参数,但编译时,有一个参数,为(返回值)std::stack<double>引用
std::stack<double> fac()
{
	std::stack<double> st;
	st.push(0);
	return st;
}
int _tmain(int argc, _TCHAR* argv[])
{
	cout << fac().size();
//lea         eax,[esp+0Ch]  
//push        eax  
//call        fac (11910E0h)  
//add         esp,4  
}

cstone40 2017-03-11
  • 打赏
  • 举报
回复
针对楼上兄弟的疑问解答如下: 1、没有重载,因为是C编写的函数库,因此应该不存在重载问题; 2、该静态库中的函数pj_str(char* p)在非Qt的vs2012环境下编写的控制台函数,能够正确运行;只是在Qt环境下才出现错误,因此应该不存在有默认参数,即有同样函数名且需两个参数; 3、不管前面是否有其他函数,在Qt下编译都存在错误。 求专家继续求解!!!!!!!!!
GKatHere 2017-03-11
  • 打赏
  • 举报
回复
1: 你看对方是否对函数进行了重载,类似于 new, 与不抛出new 2: 是否有默认参数 3: 机码中的压栈是不是提前压栈,即所压入的值,用于下一个函数而不是当前函数

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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