如何在 Visual C 中正确修改 .def 文件6 程序?

发布于 2024-10-25 17:27:43 字数 547 浏览 1 评论 0原文

我正在对一个使用 .def 文件处理函数导出的 C++ 6.0 项目进行维护。我必须将一对实例方法添加到类定义中,但我不知道如何将这些方法添加到 .def 文件中以便导出它们。 .def 文件中 EXPORTS 部分下的每一行看起来都像 ?MethodName@ClassName@@AStringOfLetters ,可能在末尾添加了一个 @Z ,我无法理解。 。我假设该字符串在某种程度上与该方法的原型相对应,但我找不到任何描述编码的文档。我添加的方法没有与任何现有方法完全匹配的原型。

假设我的新方法原型如下所示:

  short ClassName::Foo1(const short, const unsigned int, const short, const unsigned int *);
  short ClassName::Foo2(const short, const unsigned int, short *, unsigned int *);

我需要在 .def 文件中添加什么才能使我的链接器满意并实际导出方法?

I'm doing maintenance on a C++ 6.0 project that uses a .def file to handle function exports. I had to add a pair of instance methods to a class definition, but I don't know how to add these methods to the .def file so they get exported. Each line under the EXPORTS section in the .def file looks something like ?MethodName@ClassName@@AStringOfLetters with maybe a @Z tacked on the end for no reason I can fathom. I'm assuming the string of letters corresponds in some way to the prototype of the method, but I can't find any documentation that describes the encoding. The methods I added don't have a prototype that exactly matches any of the existing methods.

Let's say my new method prototypes look like this:

  short ClassName::Foo1(const short, const unsigned int, const short, const unsigned int *);
  short ClassName::Foo2(const short, const unsigned int, short *, unsigned int *);

What do I need to add to the .def file in order to make my linker happy and actually export the methods?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

清旖 2024-11-01 17:27:43

您正在导出 C++ 损坏的符号。我会暂时在它们前面添加一个 __declspec(dllexport) ,然后在 Dependency Walker 之类的工具中加载 DLL,或者使用 dumpbin 查看导出的内容。这将为您提供新函数的损坏符号,然后您可以将其添加到 .def 文件并删除 __declspec

You are exporting the C++ mangled symbols. I would add a __declspec(dllexport) in front of them temporarily and then load the DLL in something like Dependency Walker, or use dumpbin to see what is exported. This will give you the mangled symbol for you new functions and then you can add that to the .def file and remove the __declspec.

爺獨霸怡葒院 2024-11-01 17:27:43

要获取新函数的损坏名称,只需注释掉实现并构建项目即可。这样你就会得到一个类似的错误,显示你的新函数的错误名称。使用这个新的损坏名称更新您的 def 文件。

To get the mangled name for your new functions, just comment out the implementation and build the project. This way you would get a liker error showing the mangled name of your new function. Update your def file with this new mangled name.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文