我正在更改将在dll中导出的函数的签名。
DEF文件:
...
??0CLimitOrderBase@Base@@QEAA@H@Z
?foo@CLimitOrderBase@Base@@UEAAHAEAVCLimitInfo@2@@Z
...
代码将从
更改namespace Base {
class CLimitOrderBase : public CLimit
{
...
virtual BOOL foo(CLimitInfo &limitInfo);
...
};
到
virtual BOOL foo(CLimitInfo &limitInfo, bool bCheck = false);
如何在DEF文件中更改新的受损名称?
答案 0 :(得分:1)
将以下内容添加到头文件中,其中包含DLL中的每个其他头文件(使用有意义的内容重命名YOURDLL):
#ifdef YOURDLL_EXPORTS
#define YOURDLL_API __declspec(dllexport)
#else
#define YOURDLL_API __declspec(dllimport)
#endif
然后按照此示例声明导出的类:
class YOURDLL_API CLimitOrderBase : public CLimit
{
...
virtual BOOL foo(CLimitInfo &limitInfo);
...
};
最后,在DLL项目中定义YOURDLL_EXPORTS
(属性 - > C / C ++ - >预处理器下的预处理器定义字段)。
这样您就不需要手动编辑.DEF
文件。
答案 1 :(得分:0)
使用dllexport
是一个好主意,但目前我只是更改了现有大型DEF文件的一个功能,.def vs _declspec(dllexport)超出了这个主题。
感谢Hans Passant的评论,我终于弄明白了如何从Visual Studio中获取错误的C ++函数名称(对于g ++,请参考this answer。)
.map
文件:
Linker
文件夹Debug
属性页Generate Map File
属性。.map
文件,搜索函数名称。.def
文件