【问题标题】:Cannot create valid dll by using Visual C++ 2012无法使用 Visual C++ 2012 创建有效的 dll
【发布时间】:2013-04-03 13:01:38
【问题描述】:

我尝试按照this walkthrough 使用 Visual C++ 2012 创建一个 dll,但我失败了。当我尝试在不同的项目中导入构建的 dll 作为参考时,出现此错误:A reference to '***.dll' could not be added. Please make sure that the file is accessible, and that it is a valid assembly or COM component.

我不明白我在代码中的错误是什么以及为什么会出现此错误。这是我的头文件和 cpp 文件:

DLLEXPORT.H

__declspec(dllexport) bool setMute();
__declspec(dllexport) bool setActive();

DLLEXPORT.CPP

#include "DLLEXPORT.H"
bool setMute(){
    //some stuff
}
bool setActive(){
    //some stuff
}

此外,我也尝试通过这个solution解决问题,但是我得到了这个错误:TlbImp : error TI1002 : The input file '****.dll' is not a valid type library.

【问题讨论】:

  • 将此名称也添加到导出定义的文件中
  • 您的 DLL 不是 .NET 程序集,也不是 COM 服务器,因此无法将其添加为引用。您需要使用 [DllImport] 来使用它。
  • 通过这种方式创建的 Dll 应使用链接器附加依赖项添加到客户端 C/C++ 项目中,而不是作为 .NET 或 COM 引用。您需要将 .lib 文件添加到链接器列表中。
  • 或者您可以将 DLL 项目添加到同一个解决方案中,然后从您的目标项目中添加对 DLL 项目的引用。
  • 在我看来,更准确的标题应该是:“如何使用托管代码中的 DLL?”

标签: c++ visual-c++ dll dllexport


【解决方案1】:

在 Microsoft 世界中有不同种类的 DLL(和 EXE):本地 DLL,由本地 C++(或 C)和程序集生成,包含 .NET 可执行文件。您阅读的演练将为您提供本机 DLL,而您尝试执行的引用仅适用于 .NET 程序集(和 COM 组件)。

因此,您要么必须构建一个 .NET DLL(它将是 C++/CLI 而不是本机 C++),要么将您的本机 DLL 链接到本机应用程序(或导入它),而不是在 .NET 项目中引用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    • 1970-01-01
    • 2013-03-26
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多