2011-05-23 139 views
1

我正在开发一个托管库(使用Microsoft Web服务),我将其包括到一个C++项目中。该项目不使用/clr选项, ,所以当我包括我的图书馆的头文件VS2005显示我的错误 说我必须使用/clr选项。这样做我有一个不兼容 与/EHs命令行选项(错误D8016),但从EHs更改为 没有异常处理不解决问题,并继续显示我相同的错误。本地C++编写C#托管代码

任何建议是值得欢迎的。

预先感谢您。

+7

您不能在同一个项目中编写C#和C++代码。 – 2011-05-23 10:31:43

+3

如果不使用'/ clr'选项,则无法创建托管库。 – Gabe 2011-05-23 10:35:41

+0

@CodyGray:是的,你可以;阅读[.netmodule](http://msdn.microsoft.com/en-us/library/k669k83h.aspx)文件。 – ildjarn 2011-05-23 15:01:22

回答

1

您不能使用非托管C++应用程序中的托管库。由于您添加了/ clr选项,因此您的C++应用程序也会受到管理(仅用于记录:))

以下是可能对您有帮助的信息:http://msdn.microsoft.com/en-us/library/ffkc918h.aspx -/clr选项的限制。

+0

几乎正确:要从非托管代码使用托管库,您需要创建包装库或以其他方式导出非托管符号。 – 2011-05-23 11:08:12

+0

不,它不会工作,在那个链接它告诉达笏是事物clr不可编辑的,我想解决这个错误,没有解决方案,直到找到指定的链接:( – user765829 2011-05-23 11:13:33

0

可以编写托管C++适配器,它将调用C#库,并从非托管C++程序调用此适配器,就像您通常调用普通的C++库一样。如果出于任何原因想要保持它不被管理,你将使用/ clr和你的主要C++程序编译你的适配器库。

4

如果有非托管C++代码,并希望使用托管代码,您有几种选择:

  • 更改您的非托管代码,C++/CLI,通过使用/clr开关。
  • 编写一个C++/CLI包装库。它可以DLL导出在非托管代码中调用的非托管函数。
  • 跳过包装库并直接通过this library DLL导出非托管功能。
0

您可以嵌入单声道环境并启动AppDomain。 mono的运行时API将允许您实例化类并调用它们的成员。这将是笨拙,但将努力

http://www.mono-project.com/Embedding_Mono

注意,Mono是一个完整的.NET 4.0兼容的CLR,它可以在Windows上使用微软的核心库工作。

在Windows和Unix上,它可以与Mono corlib/class库一起工作。 Mono中没有覆盖的区域,但它们看起来很稀疏。您可以使用MoMa工具来确定您的应用程序是否使用不兼容/不完整的API。

或者你可以使用微软的.NET框架,假设你在Windows上!