首页
社区
课程
招聘
cpp文件调用ASM编译的函数问题
发表于: 2012-9-2 21:58 5815

cpp文件调用ASM编译的函数问题

2012-9-2 21:58
5815
cpp文件调用了ASM文件中的函数sub_40D80C,声明定义如下:
extern "C" int __cdecl sub_40D80C(char *Source, char *Dest);
结果链接的时候报错
error LNK2001: unresolved external symbol _sub_40D80C
打开.obj文件,找到函数的名称,如下:
_sub_40D80C@0
请问这个是什么原因导致链接通不过? 是不是后面多了个@0? 为什么会加上@0?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 292
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
ASM编译的时候采用的是什么调用约定?
2012-9-2 22:06
0
雪    币: 126
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
ASM文件:
.386
.model flat, stdcall  ;32 bit memory model
这个定义是不是代表所有proc都是stdcall方式?
sub_41B9A0        proc near                ; CODE XREF: sub_40D80C+3Ep
                                ....
                retn
sub_41B9A0        endp
实际上应该是cdel方式.
我把上面的.model flat, stdcall  ;32 bit memory model
改成.model flat, cdel ;32 bit memory model后,再次编译就暴一大堆data段定义错误?如下:
error A2034: must be in segment block
error A2034: must be in segment block

是不是这样修改错了?
2012-9-2 22:20
0
雪    币: 126
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢提醒,自己看了下调用约定,改成如下,问题解决
.model flat, c  ;32 bit memory model
2012-9-3 00:36
0
雪    币: 3496
活跃值: (749)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
Nark 学百一下。
2013-11-21 12:21
0
游客
登录 | 注册 方可回帖
返回
//