masm32 调用 vc++6 编写的函数?

时间:2021-03-06 01:13:41
我想在汇编语言中调用VC6编写的函数(obj文件),总是不成功。
看了一下VC6生成的汇编码,一个函数MyLib_Message生成的汇编码的函数名是?MyLib_Message@@YGHPAD@Z,这也太怪了吧。
哪位高人请指点一下,谢谢。

6 个解决方案

#1


这个只不过是Exports函数在lib中的表现形式,如果你需要使用VC写的东东,首先你必须知道它的函数定义,现在你知道的是名称,还需要知道参数多少个。“@@YGHPAD@Z”就是表现参数的。
使用起来就像正常函数一样使用,只需要MyLib_Message名称,而不是所谓的MyLib_Message@@YGHPAD@Z
但是,我不知道光是obj只能不能使用哦。我只用过dll的,有了lib文件,自己写一个函数定义,就完全可以使用了。

#2


今天开始学习ASM 32

#3


UP

#4


好像这个不用学汇编吧?

#5


C++编译出来的函数,在函数名后面都加了一些字母表示参数和返回值类型。
在C++函数定义前加上extern "C" 就可以了。

#6



int __stdcall MyLib_Message(char *);
改成
extern "C" int __stdcall MyLib_Message(char *);

注意,这里声明了STDCALL类型,在汇编语言里声明此函数时也要是STDCALL,不然调用完此函数后esp值会错。

#1


这个只不过是Exports函数在lib中的表现形式,如果你需要使用VC写的东东,首先你必须知道它的函数定义,现在你知道的是名称,还需要知道参数多少个。“@@YGHPAD@Z”就是表现参数的。
使用起来就像正常函数一样使用,只需要MyLib_Message名称,而不是所谓的MyLib_Message@@YGHPAD@Z
但是,我不知道光是obj只能不能使用哦。我只用过dll的,有了lib文件,自己写一个函数定义,就完全可以使用了。

#2


今天开始学习ASM 32

#3


UP

#4


好像这个不用学汇编吧?

#5


C++编译出来的函数,在函数名后面都加了一些字母表示参数和返回值类型。
在C++函数定义前加上extern "C" 就可以了。

#6



int __stdcall MyLib_Message(char *);
改成
extern "C" int __stdcall MyLib_Message(char *);

注意,这里声明了STDCALL类型,在汇编语言里声明此函数时也要是STDCALL,不然调用完此函数后esp值会错。