这个问题来自我之前的问题:Create DLL from unmanaged C++,但是您无需阅读它即可了解这个新问题。

现在,我有一个DLL,其中包含由一些函数组成的非托管C++代码,其中只有一个函数供外部使用。接下来,我需要在Managed C++项目(使用Common Language Runtime支持构建)中使用此DLL。到目前为止,我已经通过在Visual Studio 2010中设置Additional Include Directories添加了对现有非托管项目的头文件的引用。

如果现在尝试添加对DLL文件的引用:MyManagedProject > Properties > Common Properties > Add New Reference > Browse > MyUnmanagedDLL.dll,则会收到错误信息Could not add a reference to file MyUnmanagedDLL.dll because it is neither a .NET assembly nor a registered ActiveX control.。但是,如果我使用前面提到的DLL并将其复制到托管C++可执行文件所在的文件夹中,则一切正常。

我不确定这是否是正确的方法,因为这似乎是一个棘手的解决方案。同样,这意味着我每次对DLL源代码进行更改时都必须复制DLL。

总结一下我的问题:

  • 我创建了一个由非托管C++代码组成的DLL,我们称之为MyUnmanagedDLL.dll。我还为此DLL创建了头文件。
  • 我有一个托管C++项目(CLR),我们称它为MyManagedProject.vxproj
  • 如何在MyUnmanagedDLL.dll中使用MyManagedProject.vxproj?有没有正确的方法来引用它,还是应该将其复制到MyManagedProject.exe所在的目录中? (这有效,但是我不确定它的良好实践...)

  • 额外信息:Windows 7,Visual Studio 2010 Ultimate,CMake 2.8.10.2

    最佳答案

    您不能将非托管DLL添加为对托管C++项目的引用。您只能使用托管DLL来做到这一点。相反,您要做的就是链接到非托管DLL,就像链接到非托管C++项目中的非托管DLL一样:

  • 使用头文件进行编译。
  • 例如,通过将非托管DLL的.lib文件添加到链接器中,方法是将其添加到链接器配置页中的“其他依赖项”列表中。
  • 将DLL与可执行文件放在同一目录中,以便加载程序可以找到它。
  • 08-18 16:09
    查看更多