看了一下VC6生成的汇编码,一个函数MyLib_Message生成的汇编码的函数名是?MyLib_Message@@YGHPAD@Z,这也太怪了吧。
哪位高人请指点一下,谢谢。
6 个解决方案
#1
这个只不过是Exports函数在lib中的表现形式,如果你需要使用VC写的东东,首先你必须知道它的函数定义,现在你知道的是名称,还需要知道参数多少个。“@@YGHPAD@Z”就是表现参数的。
使用起来就像正常函数一样使用,只需要MyLib_Message名称,而不是所谓的MyLib_Message@@YGHPAD@Z
但是,我不知道光是obj只能不能使用哦。我只用过dll的,有了lib文件,自己写一个函数定义,就完全可以使用了。
使用起来就像正常函数一样使用,只需要MyLib_Message名称,而不是所谓的MyLib_Message@@YGHPAD@Z
但是,我不知道光是obj只能不能使用哦。我只用过dll的,有了lib文件,自己写一个函数定义,就完全可以使用了。
#2
今天开始学习ASM 32
#3
UP
#4
好像这个不用学汇编吧?
#5
C++编译出来的函数,在函数名后面都加了一些字母表示参数和返回值类型。
在C++函数定义前加上extern "C" 就可以了。
在C++函数定义前加上extern "C" 就可以了。
#6
把
int __stdcall MyLib_Message(char *);
改成
extern "C" int __stdcall MyLib_Message(char *);
注意,这里声明了STDCALL类型,在汇编语言里声明此函数时也要是STDCALL,不然调用完此函数后esp值会错。
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文件,自己写一个函数定义,就完全可以使用了。
使用起来就像正常函数一样使用,只需要MyLib_Message名称,而不是所谓的MyLib_Message@@YGHPAD@Z
但是,我不知道光是obj只能不能使用哦。我只用过dll的,有了lib文件,自己写一个函数定义,就完全可以使用了。
#2
今天开始学习ASM 32
#3
UP
#4
好像这个不用学汇编吧?
#5
C++编译出来的函数,在函数名后面都加了一些字母表示参数和返回值类型。
在C++函数定义前加上extern "C" 就可以了。
在C++函数定义前加上extern "C" 就可以了。
#6
把
int __stdcall MyLib_Message(char *);
改成
extern "C" int __stdcall MyLib_Message(char *);
注意,这里声明了STDCALL类型,在汇编语言里声明此函数时也要是STDCALL,不然调用完此函数后esp值会错。
int __stdcall MyLib_Message(char *);
改成
extern "C" int __stdcall MyLib_Message(char *);
注意,这里声明了STDCALL类型,在汇编语言里声明此函数时也要是STDCALL,不然调用完此函数后esp值会错。