visual将非托管C++dll添加到托管C++dll

visual Adding an unmanaged C++ dll to a managed C++ dll

本文关键字:C++dll 添加 visual      更新时间:2023-10-16

我正在尝试将非托管C++dll添加到托管(CLI)C++dll项目中。当我单击"类向导"时,我会收到一条"MFC类只能添加到MFC项目"的错误消息。据我所知,我没有使用MFC(在我的非托管dll的项目页面下,MFC的使用是空白的)。有没有其他方法可以将非托管dll添加到我的托管dll项目中?

对于任何感兴趣的人,我在我的DropBox账户上发布了一个罕见的解决方案:https://dl.dropbox.com/u/98752313/CplusplusArrayTest.rar

我意识到有太多的设置可能是错误的,我不能简单地将所有内容复制并粘贴到可用空间中。

此解决方案中有三个项目。CplusplusArray(应该是完整的,它是非托管.dll)、ManagedCpluspplusArray(需要添加非托管dll,并修改一些内容,它是托管.dll)和C#测试程序(尚未编写,希望通过托管dll与非托管dll对话)。

如果你想知道的话,这个项目的全部目标是让C#能够使用带有long的数组作为索引器。如果您以前使用过任何数量的.Net,则可能会遇到CLR中对象大小的Int32/Uint32限制。我希望通过在C++中实现数组,然后修改/编译一些Mono Collections.Generics类来解决这个问题,从而给我们一些喘息的空间。我之所以选择C#->C++/CLI->C++,是因为根据我的研究,我们可以使用面向对象的代码;DllImport的东西只适用于类似C的函数,我想保留OOP,而不是修改东西以类似C。据我所知,由于数组是Collections命名空间的List/etc类的构建块,因此仅让它们在64位空间中发挥作用将为我们提供其他一切。

您需要添加一个新项目,而不是一个新类。一旦你"添加项目",你会被问到你想添加什么类型的项目,一个普通的C++DLL将是你的选择之一。

一旦您的解决方案中有两个项目(一个C++/CLI DLL项目和一个C++DLL项目),您就可以转到工作区依赖项,并指示其中一个依赖于另一个。


附加说明:

类向导是关于添加MFC类的。因为您对添加MFC类不感兴趣,所以这不是合适的工具。

当我编写了一个使用本机C++DLL的C++/CLI DLL时,我需要添加链接到C++DLL的导入库的指令。这是在以下位置配置的:
"项目属性>配置属性>链接器>输入>附加依赖项">

工作区依赖项可确保首先生成非托管库,并且如果更新了非托管库(如果需要),则会重新编译或重新链接托管库。