将非托管C ++ DLL添加到托管C ++ DLL

时间:2012-12-13 00:30:53

标签: c++ visual-c++ c++-cli

我正在尝试将非托管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#测试程序(尚未编写,希望能与之交谈) unmanaged dll通过托管dll)。

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

1 个答案:

答案 0 :(得分:1)

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

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


附加说明:

类向导就是添加MFC类。因为您对添加MFC类不感兴趣,所以这不是正确的工具。

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

工作区依赖性保证首先构建非托管库,如果更新了非托管库,则托管库将在需要时重新编译或重新链接。