从c#调用c ++库

Bat*_*tul 6 c# c++ unmanaged

这个问题似乎与之前的问题重复.我已阅读了一系列帖子,但对我的情况并不完全清楚.

我有一个使用momentics IDE创建的c ++库.我必须能够将这个库用于ac #project.

在交给我之前,有人一直在研究这个项目.目前,有2层可以实现这一目标.首先,c ++项目包括带有c ++包装器的完整库.该项目创建一个dll作为输出.然后将这个c ++ dll输入到ac #project,该项目具有对c ++ dll的dllimport调用.这个c#项目再次创建一个dll.最后,为了在c#应用程序中使用库,我必须包含对这两个dll的引用.

这是让它运作的正确方法吗?我想可能应该有一种简化过程的方法.

有人可以帮我解决这个问题吗?

Ada*_*son 7

鉴于您使用的是C++库,我假设它利用了类似C++的语义,而不仅仅是暴露程序.如果是这种情况,那么通常通过手动创建的托管C++互操作库来完成此操作.

基本上,您在Visual Studio中创建托管C++库,引用现有的C++库,并围绕现有C++类创建托管包装器.然后,在C#项目中引用此(托管)C++程序集,并在C#程序集中包含原始(非托管)C++库,就像放置在构建目录中的文件一样.

这是必需的,因为无法通过P/Invoke(DllImport)调用引用C++类之类的东西.

如果你的基础库只是一系列的功能,那么你可以直接在C#项目通过P引用/调用功能.

无论哪种方式,上面提到的所有库(第一个,非托管C++库,托管C++程序集和C#项目,或者第二个,非托管C++库和C#项目)都必须​​包含在任何项目中引用它们.您无法将非托管库静态链接到托管程序集.

  • +1,但我想指出,除非你使用.NET 1.1,否则"托管C++"现在被称为"C++/CLI",两者之间存在巨大的差异. (3认同)