首页 / 知识
C ++ DLL def文件中的重载函数
2023-04-13 02:53:00

Overloaded functions in C++ DLL def file我正在编写一个C / C ++ DLL,并想导出在使用像这样的.def文件之前完成的某些功能。
使用这样定义的代码,例如:
但是,如果我想像下面这样声明Foo()的重载方法,该怎么办:
由于def文件仅具有函数名称,而没有完整的原型,因此我看不到它将如何处理重载的函数。 您是否只使用一个条目,然后在将正确原型的函数指针传递给LoadLibrary()时指定所需的重载版本? 编辑:要清楚,这是在Windows上使用Visual Studio 2005 编辑:将非def(__declspec)方法标记为答案...我知道这实际上并不能解决我想要的使用def文件的问题,但是似乎没有使用def文件的(官方)解决方案。 但是,如果有人知道我们没有重载的函数和def文件,这将使问题悬而未决。 函数重载是一种C ++功能,它依赖于名称处理(链接器错误消息中的隐秘功能名称)。 通过将变形的名称写入def文件,我可以使测试项目链接并运行:
似乎为
因此,从错误消息中复制C ++函数名称,并将它们写入def文件中。但是,真正的问题是:为什么要使用def文件而不使用__declspec(dllexport)? 我使用VC ++ 2008进行了测试,其名称是不可移植的。 在代码本身中,使用__declspec(dllexport)标记要导出的函数。例如:
如果这样做,则无需在.def文件中列出功能。 或者,您可以使用默认参数值,例如:
假定存在一个b值,您可以使用该值指示未使用。如果-1是b的合法值,或者没有或不应该使用默认值,则此方法将无效。 编辑(Adam Haile):已更正以使用__declspec作为__dllspec是不正确的,因此我可以将其标记为正式答案...它足够接近。 编辑(Graeme):糟糕-感谢您纠正我的错字! 我有一个类似的问题,所以我也想发布。 通常使用
导出函数名称就可以了。
如果您声明要使用的函数
会输出一个变形的名称,例如 A.如何导出一个完整的名称。在.def文件中添加
这将尝试为内部函数Foo找到"最佳匹配"并将其导出。在上述情况下,只有 Foo = _Foo @ 4 可以通过dumpbin / EXPORTS看到
如果您重载了一个函数名,那么您可能需要在.def文件中明确说出您想要的函数
B..def文件的替代方法是您可以使用#pragma"就地"导出名称。
C.第三种选择是仅声明Foo的一个版本作为外部" C",以不加破坏地导出。有关详细信息,请参见此处。 没有正式的方法可以执行您想要的操作,因为dll接口是C api。 编译器本身使用变形的名称作为解决方法,因此,当您不想在代码中进行太多更改时,应使用名称变形。 导出定义的系统税是:
entryname是要导出的函数或变量名。这是必需的。如果您导出的名称与DLL中的名称不同,请使用内部名称在DLL中指定导出的名称。 例如,如果您的DLL导出函数func1()并希望将其用作func2(),则应指定:
只需查看变形的名称(使用Dependency Walker)并指定您自己的函数名称即可。 来源:http://msdn.microsoft.com/en-us/library/hyx1zcd3(v=vs.71).aspx 编辑:这适用于动态DLL,我们需要使用GetProcAddress()来显式获取Dll中的函数。 没有一种语言或版本不可知的方法来导出重载函数,因为随着每个编译器版本的发布,更改约定都会改变。 这就是大多数WinXX函数具有有趣的名称(如* Ex或* 2)的原因之一。 |
最新内容
相关内容
python怎么使用文件夹下的脚本?
python怎么使用文件夹下的脚本?,工作,培训,文件夹,脚本,文件,所在,方法,示例,路径,以上,python中使用文件夹下脚本的方法:将当前的工作目录(即python如何调用另一个文件夹中的内
python如何调用另一个文件夹中的内容?,系统,培训,文件,模块,内容,路径,函数,所在,前缀,语句,python中调用另外一个文件夹中的内容:1、同一文件python中怎么读取doxc文件?
python中怎么读取doxc文件?,培训,文档,文件,路径,命令,以上,更多,内容,python中可以使用python-docx库读取doxc文件,我们可以使用pipinstallpython如何删除某个目录文件夹?
python如何删除某个目录文件夹?,名字,代码,培训,文件夹,方法,文件,目录,语法,路径,格式,python删除某个目录文件夹及文件的方法:#!/usr/bin/en如何在python代码中指定保存的文件
如何在python代码中指定保存的文件格式,代码,培训,文件格式,格式,二进制文件,文件,后缀,以上,方法,更多,python指定保存文件格式的方法:1、保Python如何复制文件中的内容
Python如何复制文件中的内容,盘中,数据,培训,文件,内容,方法,文件夹,路径,源文件,文件名,python复制文件中内容的方法:1、使用shutil.copyfilepython如何获取打开文件的行数?
python如何获取打开文件的行数?,数据,培训,文件,方法,列表,下标,字符串,序列,函数,长度,python获取打开文件行数的方法:1、文件较小时可以使用Python中怎么新建文件夹
Python中怎么新建文件夹,代码,工作,培训,文件夹,路径,函数,操作系统,示例,文件名,以上,python中如何新建文件夹的方法:可以使用os包的mkdir函Python文件如何转换为字符串
Python文件如何转换为字符串,数据,主体,名字,培训,文件,字符串,末尾,方法,对象,语句,python文件如何转换为字符串的方法:一、最方便的方法是一如何用python复制文件内容
如何用python复制文件内容,数据,名字,培训,文件,内容,方法,备份,字符串,文件名,语法,用Python复制文件:#输出需要备份的文件名oldname=input(python如何生成文件夹
python如何生成文件夹,数字,培训,目录,方法,语法,文件夹,模式,权限,示例,参数,python中可以使用os.makedirs()方法创建多级目录:os.makedirs()python脚本如何查找文件是否存在
python脚本如何查找文件是否存在,异常,培训,代码,文件,模块,路径,程序,脚本,语句,错误,python脚本查找文件是否存在的方法:1、使用os模块os模