dumpbin 命令未在 dll 中列出函数名称
Posted
技术标签:
【中文标题】dumpbin 命令未在 dll 中列出函数名称【英文标题】:dumpbin command not listing function names in dll 【发布时间】:2015-08-11 11:28:49 【问题描述】:我有一个在 VB.Net 中开发的 DLL。我试图从我的 vc++ 代码中调用它的函数。 dll 已使用 LoadLibrary 函数成功加载。 但是当我尝试调用 dll 中的任何函数时,它会给出一个空指针异常。
我使用了 dumpbin 命令来确认我的 dll 中的函数参数。但它没有列出任何功能。可能是dll有问题还是dumpbin只支持几个dll?请帮忙!
C:\Program Files (x86)\Microsoft Visual Studio 11.0>dumpbin ECR.dll Microsoft (R) COFF/PE Dumper 版本 11.00.51106.1 版权所有 (C) 微软公司。保留所有权利。
转储文件 ECR.dll
文件类型:DLL
总结
2000 .reloc 4000 .rsrc 2000 .sdata 16000 .text
【问题讨论】:
试试dumpbin /exports ECR.dll
看看你有没有列出的功能。
我试过 dumpbin /exports ECR.dll 并得到相同的结果。没有列出任何功能。
是否有任何函数从该 DLL 导出?
我看不到 dll 代码。它是由第三方提供的。但是,如果我在 windows 项目中加载 dll,我可以成功调用这些函数。
VB.NET 类库项目永远不会有任何导出。从非托管 C++ 代码调用 vb.net 代码是一项重要的操作,C++ 代码需要首先加载和初始化 CLR。它必须做一些事情来处理此类代码抛出异常的高可能性。标准技术是制作 vb.net 代码 [ComVisible] 或使用 IMetaData 托管 CLR。由于错误报告非常差,常用但一个坏主意是编写使用 __declspec(export) 和 Giesecke 的 Unmanaged Exports 库的 C++/CLI 包装函数。
【参考方案1】:
尝试在您的 DLL 文件(头 .h 文件)中的任何函数之前写入项目名称,并以 _API 结尾 (ECR_API)。
例如,假设我们要为一个名为 Loader 的类创建构造函数和析构函数:
class Loader
public:
ECR_API Loader();
ECR_API ~Loader();
别忘了在头文件的开头添加导出和导入语句:
#ifdef ECR_EXPORTS
#define ECR_API __declspec(dllexport)
#else
#define ECR __declspec(dllimport)
#endif
希望这会有所帮助! 对我来说很好。
【讨论】:
以上是关于dumpbin 命令未在 dll 中列出函数名称的主要内容,如果未能解决你的问题,请参考以下文章