gpt4 book ai didi

c# - VS2010 中的 C++ 运行针对 .NET 4.5 的托管 C# DLL

转载 作者:行者123 更新时间:2023-11-30 02:36:17 32 4
gpt4 key购买 nike

我有一个在 Visual Studio 2010 中创建的 C++ 项目,它需要从 C# DLL 执行代码。我已经这样做了,使用了

#import "pathname\filename.tlb" raw_interfaces_only

指令,以及 CoInitialize(NULL) 和 CoUninitialize() COM 调用。

C# DLL 在 VS2012 中编译,目标为 .NET 4.5。

我能够编译并运行该项目,似乎一切都很好,但我们注意到某些函数调用存在差异。这是通过将完全相同的 C++ 项目加载到 VS 2012,在配置属性中打开/clr,并通过修改记事本中的 .vcxproj 文件将(C++ 项目的)目标框架更改为 v4.5 来验证的。

所以,我想我的问题是:

  1. 为什么 C++ 项目需要以 .NET 框架为目标? C# DLL 不应该能够自行处理吗? (由汉斯·帕桑特回答)

  2. 为什么可以在/clr 关闭的情况下通过 C++ 运行 C#.NET v4.5 DLL,并且没有任何可能无法运行的警告? (由汉斯·帕桑特回答)

  3. 为什么我什至能从函数调用中得到结果? C# DLL 怎么可能“工作”(返回一致的结果)呢?为什么它在面向 .NET v4.0 时返回不同的值?

  4. 是否可以在使用 VS 2010 的同时使用 C++ 代码中的 C# DLL?或者我需要将项目切换到 VS 2012 吗?

提前致谢。

最佳答案

原生 C++ 项目根本不以 .NET Framework 为目标。项目创建向导有点笨拙,它不会在您创建 C++ 项目时隐藏组合框。

C# DLL 需要什么框架版本是在你注册的时候确定的。当您勾选“为 COM 互操作注册”build设置时自动完成,或者通过运行 Regasm.exe 显式完成。

native C++ 代码可以毫无问题地调用 C# 代码,这只是您从使用 COM 中获得的好处。其基本目的是提供契约(Contract)和粘合剂,以允许一种语言调用另一种语言编写的代码。 CLR 有很好的 COM 支持,使它看起来很容易。对于 C++,情况并非如此,编写 COM 客户端代码通常会因为冗长而不愉快,而且很容易出错。使用 raw_interfaces_only 是错误的,您无法通过智能指针和异常错误处理获得内存管理的好处。

关于c# - VS2010 中的 C++ 运行针对 .NET 4.5 的托管 C# DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32975934/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com