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 中列出函数名称的主要内容,如果未能解决你的问题,请参考以下文章

怎么查看dll里面的函数,怎么用dumpbin查看dll

MFC Dll 导出函数

如何查看一个DLL文件中具体的函数及其代码?

如何从 dll 中导出没有名称的函数

关于DLL调试的两个工具(dependency walker和dumpbin.exe)

C#编写的DLL文件怎么导出函数?