用本机 C++ 编写 C# 托管代码

发布于 2024-11-09 11:33:47 字数 266 浏览 4 评论 0原文

我正在开发一个托管库(使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

风月客 2024-11-16 11:33:47

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

  • 使用 /clr 开关将非托管代码更改为 C++/CLI。
  • 编写 C++/CLI 包装器库。它可以 DLL 导出您在非托管代码中调用的非托管函数。
  • 跳过包装器库,通过此库直接 DLL 导出非托管函数。

If you have unmanaged C++ code and want to use managed code, you have a few options:

  • Change your unmanaged code to C++/CLI, by use of the /clr switch.
  • Write a C++/CLI wrapper library. It could DLL-export unmanaged functions which you call in your unmanaged code.
  • Skip the wrapper library and directly DLL-export unmanaged functions via this library.
三五鸿雁 2024-11-16 11:33:47

您不能使用非托管 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.

提赋 2024-11-16 11:33:47

可以编写托管 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.

爱她像谁 2024-11-16 11:33:47

您可以嵌入单一环境并启动 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!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文