创建C++ Dll,并从C#调用它#
在我的项目中,我得到了一个带有C++示例代码的设备。代码正常,设备按预期工作。创建C++ Dll,并从C#调用它#
但我需要它与我的C#接口交谈,因为所有其他设备当前正在使用C#接口。
所以我打算为驱动程序创建一个DLL包装器。我将创建一个我自己的C++库(从具有适当接口的源代码),并使用DLLImport从C#调用此C++库(只需在那里调用我的接口)。
我非常肯定它可以这样做,但我从来没有创建过C++库,并从C#中使用它。那么,任何人都可以向我推荐一些适合我的问题的教程吗?
我使用C++/C#INT VS.NET 2008
问候, Maksud
另一个有用的工具,你可以在你的处置是C++ CLI。
您可以使用C++ CLI创建中间库 - 一个公开托管类但运行非托管C++代码的库。实际上,您可以在同一个DLL中混合托管和非托管C++。
非托管部分可以访问非托管DLL而无需使用PInvoke函数。
您的C#代码可以访问此中间库中的托管类。
+1。实际上,您可以在同一个DLL中混合托管和非托管C++。 – RickNZ 2009-12-23 06:25:01
@RickNZ - 这正是我试图传达的信息,但它一定不够清楚。我已经在邮件中加入了你的句子,谢谢。 – 2009-12-23 06:39:37
这绝对是要走的路,除非您计划将库移植到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提供支持。看看当前的版本,免费版本即将推出。
(我是该工具的作者)
版本2似乎仍处于alpha版本的早期阶段。用户界面非常麻烦,并且没有生成文件。 (“发生异常:无法检索PDB信息..“) – StuWeldon 2014-08-30 04:38:11
@StuWeldon,您可能已经尝试过为当前的试用版本不支持的C风格的DLL构建一个C#包装,我们在最新版本中添加了C风格DLL支持,但无法下载。仍然有兴趣使用xInterop NGen ++来为你的C风格DLL创建封装,请使用我们网站上的联系我们页面联系我们,我们应该能够解决你遇到的问题。任何其他人有任何问题,请也请通过http://www.xinterop.com与我们联系,我们将能够更好地为您提供支持。 – xInterop 2014-09-22 01:56:11
这是一个很好的例子。谢谢。 – max 2009-12-23 08:30:45