2009-09-30 109 views

回答

5

如果您希望程序是本地的,而不是托管的,您需要将它移植到C++,而不是使用C#。这就是说,你可以用C#将它编译成一个库,并使用C++通过C++/CLI使用它。这只需要你编译使用C#库的文件和/ clr标志。这提供了C++对.NET框架的访问,并允许您直接使用C++使用C#编写的库。

或者,您可以使用.NET的COM互操作来将C#类作为COM对象公开,然后使用来自本机C++的类。

+0

我可以用C做这个吗? – displayname 2014-02-06 13:37:57

0

它可能在Visual Studio 2008中,但是你不能用C#编写它。

要创建本机DLL,您必须使用其中一个非托管C++项目类型编写代码。

0

是的,你可以。
您需要创建第二个项目。
该项目必须是非托管的(如“visual C++” - >类库)。
此过程的名称是“从非托管代码调用到托管代码”

良好的阅读unmanaged to managed (codeproject)
你必须意识到,即,使用您的DLL的任何计算机必须预装DOTNET的的Visual C++可再发行组件包

6

本地< - > .NET互操作程序是一个我的宠物纪律,这就是为什么我需要尽可能简单和可靠。

结果是我让我成为一个MSBuild task,我只需要拖动到一个项目中就可以从几乎任何.Net语言中导出静态方法。而且由于整个编组基础设施也适用于出口,所以你可以做任何你想做的事情(比如像IUnknown传递本地/托管对象)。

生成的程序集将像真正的DLL一样查看消耗过程,这意味着您不能再自动扩展到64位。

但是,由于您的应用程序中确实有本地位,因此您已经有此问题了。 ;-)

当你没有在你的C#项目中指定CPU目标时,我的任务会发出一个警告,说它为所有目标(x86,x64和Itanium)创建了一个文件夹,并且你将拥有*。 dll和* .pdb为每个平台。

+0

+1好东西。我期待着发布源代码(你在“License and stuff ...”中提示)看看它是如何工作的。 – 2009-11-12 13:00:20

+0

Thx,释放源不在列表的顶部。因为我必须先选择一个许可证。而且广泛传播的许可证方式太严格,国际海事组织... – 2009-11-12 22:22:09

+0

我想要尽量减少限制,同时保留版权,BSD许可证是自然选择。但是GPL对于构建工具也很好(例如,gcc编译器套件是GPL编译的并被广泛用于构建商业应用程序)。你有什么问题限制? – 2009-11-13 14:39:34

相关问题