用本机 C++ 编写 C# 托管代码
我正在开发一个托管库(使用 Microsoft Web 服务)并且我 将其包含到 C++ 项目中。该项目不使用 /clr
选项, 所以当我包含我的库的头文件 VS2005 时显示错误 说我必须使用 /clr
选项。这样做我有不兼容性 使用 /EHs
命令行选项(错误 D8016),但从 EHs
更改为 没有异常处理无法解决问题并不断向我显示相同的错误。
欢迎任何建议。
先感谢您。
I am developing a managed lib (using Microsoft Web Services) and I am
including it into a c++ project. The project doesn't use /clr
option,
so when I include my library's header file VS2005 show me an error
saying I have to use /clr
option. Doing this I have a incompatibility
with /EHs
command line option (error D8016), but changing from EHs
to
no exception handling not solving problem and keep showing me same error .
Any suggestion is welcome.
Thank you in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
如果您有非托管 C++ 代码并希望使用托管代码,您有以下几种选择:
/clr
开关将非托管代码更改为 C++/CLI。If you have unmanaged C++ code and want to use managed code, you have a few options:
/clr
switch.您不能使用非托管 C++ 应用程序中的托管库。由于添加了 /clr 选项,您的 C++ 应用程序也将被托管(仅供记录:))
以下内容可能对您有帮助: http://msdn.microsoft.com/en-us/library/ffkc918h.aspx - /clr 选项的限制。
You can't use a managed lib from an unmanaged c++ application. Since you add the /clr option, your c++ application becomes managed too (just for the record :) )
Here's what might help you: http://msdn.microsoft.com/en-us/library/ffkc918h.aspx - the restrictions of the /clr option.
可以编写托管 C++ 适配器,它将调用 C# 库,并从非托管 C++ 程序调用此适配器,就像通常调用普通 C++ 库一样。如果出于某种原因您希望使其保持非托管状态,您将使用 /clr 编译您的适配器库,并且不使用 /clr 编译您的主 C++ 程序。
It is possible to write managed c++ adapter, that will call the C# library, and call this adapter from unmanaged c++ program as you would usually call a normal c++ library. You will compile your adapter library with /clr and your main c++ program without /clr if for whatever reason you want to keep it unmanaged.
您可以嵌入单一环境并启动 AppDomain。 mono 的运行时 API 将允许您实例化类并调用它们的成员。它会很笨拙,但可以工作
http://www.mono-project.com/Embedding_Mono
请注意,Mono 是完全兼容 .Net 4.0 的 CLR,它可以与 Windows 上的 Microsoft 核心库配合使用。
在 Windows 和 Unix 上,它可以与 Mono corlib/类库一起使用。有些区域没有被 Mono 覆盖,但它们似乎变得稀疏。您可以使用 MoMa 工具来确定您的应用程序是否使用不兼容/不完整的 API。
或者您也可以只使用 Microsoft .NET 框架,前提是您使用的是 Windows!
You can embed a mono environment and start an AppDomain. mono's runtime API will allow you to instantiate classes and call members on them. It will be clumsy, but is will work
http://www.mono-project.com/Embedding_Mono
Note that Mono is a full .Net 4.0 compliant CLR and it can work with the Microsoft core libraries on Windows.
On windows and Unix it can work with the Mono corlib/class libraries. There are areas not covered in Mono, but they seem to get sparse. You can use the MoMa tool to spot whether your application uses incompatible/incomplete APIs.
Or you can just use the Microsoft .NET framework, assuming you're on windows anyway!