创建C++ Dll,并从C#调用它#

问题描述:

在我的项目中,我得到了一个带有C++示例代码的设备。代码正常,设备按预期工作。创建C++ Dll,并从C#调用它#

但我需要它与我的C#接口交谈,因为所有其他设备当前正在使用C#接口。

所以我打算为驱动程序创建一个DLL包装器。我将创建一个我自己的C++库(从具有适当接口的源代码),并使用DLLImport从C#调用此C++库(只需在那里调用我的接口)。

我非常肯定它可以这样做,但我从来没有创建过C++库,并从C#中使用它。那么,任何人都可以向我推荐一些适合我的问题的教程吗?

我使用C++/C#INT VS.NET 2008

问候, Maksud

+0

这是一个很好的例子。谢谢。 – max 2009-12-23 08:30:45

根据DLL,你需要做的,你可能不需要直接创建一个包装的东西。您可能可以通过P/Invoke获得该功能。您需要评估您的具体需求以及库中提供的代码。

+0

对于漂亮的文章+1。 – max 2009-12-23 07:08:03

另一个有用的工具,你可以在你的处置是C++ CLI

您可以使用C++ CLI创建中间库 - 一个公开托管类但运行非托管C++代码的库。实际上,您可以在同一个DLL中混合托管和非托管C++。

非托管部分可以访问非托管DLL而无需使用PInvoke函数。

您的C#代码可以访问此中间库中的托管类。

+0

+1。实际上,您可以在同一个DLL中混合托管和非托管C++。 – RickNZ 2009-12-23 06:25:01

+0

@RickNZ - 这正是我试图传达的信息,但它一定不够清楚。我已经在邮件中加入了你的句子,谢谢。 – 2009-12-23 06:39:37

+0

这绝对是要走的路,除非您计划将库移植到Mono,而Mono不支持C++/CLR中的本机代码。 – 2009-12-23 06:42:05

对于任何涉及到谁这个问题,并正在寻找的答案,你可能会想尝试xInterop NGen++ , a C# wrapper generator for native C++ DLL,已刚刚公布于众,该工具可以生成C#包装通过使用先进的P/Invoke技术,自动且即时地为原生C++ DLL提供支持。看看当前的版本,免费版本即将推出。

(我是该工具的作者)

+0

版本2似乎仍处于alpha版本的早期阶段。用户界面非常麻烦,并且没有生成文件。 (“发生异常:无法检索PDB信息..“) – StuWeldon 2014-08-30 04:38:11

+0

@StuWeldon,您可能已经尝试过为当前的试用版本不支持的C风格的DLL构建一个C#包装,我们在最新版本中添加了C风格DLL支持,但无法下载。仍然有兴趣使用xInterop NGen ++来为你的C风格DLL创建封装,请使用我们网站上的联系我们页面联系我们,我们应该能够解决你遇到的问题。任何其他人有任何问题,请也请通过http://www.xinterop.com与我们联系,我们将能够更好地为您提供支持。 – xInterop 2014-09-22 01:56:11