VS2010中的c++运行一个针对.net 4.5的托管c# DLL
C++ in VS2010 running a managed C# DLL targeting .NET 4.5
我有一个c++项目,在Visual Studio 2010中创建,需要执行c# DLL中的代码。我使用
#import "pathnamefilename.tlb" raw_interfaces_only
指令,以及CoInitialize(NULL)和CoUninitialize() COM调用。
c# DLL是在VS2012中编译的,目标是。net 4.5。
我能够编译并运行这个项目,看起来一切都很好,但是我们注意到一些函数调用的差异。这是通过将完全相同的c++项目加载到VS 2012中,在配置属性中打开/clr,并通过修改记事本中的.vcxproj文件将目标框架(c++项目的)更改为v4.5来验证的。
我想我的问题是:
为什么c++项目需要以。net框架为目标?c# DLL不应该自己处理吗?(Hans Passant回答)
为什么可以运行c#。. NET v4.5 DLL通过c++与/clr关闭,并没有任何警告,它可能无法工作?(Hans Passant回答)
为什么我甚至从函数调用中得到结果?如何可能的c# DLL"工作"(返回一致的结果)?为什么它在针对。net v4.0时返回不同的值?
是否可以从c++代码中使用c# DLL,而仍然使用VS 2010?或者我是否需要将项目切换到VS 2012?
原生c++项目根本不针对。net框架。项目创建向导有点笨拙,当您创建c++项目时,它不会隐藏组合框。
c# DLL需要的框架版本是在注册时确定的。当你勾选"注册COM互操作"构建设置时自动完成,或者通过运行Regasm.exe显式地完成。
本地c++代码可以轻松调用c#代码,这只是你从使用COM中得到的好处。它的基本目的是提供契约和粘合剂,以允许一种语言调用用另一种语言编写的代码。CLR有很好的COM支持,使它看起来很简单。对于c++来说,情况并非如此,编写COM客户端代码通常是令人不愉快的,因为它冗长而且很容易出错。使用raw_interfaces_only
是一个错误,您不会获得智能指针内存管理和异常错误处理的好处。
- 加载与引用 .NET DLL 位于同一文件夹中的引用的 .NET DLL 时"Not found"异常
- VB.NET DLL中的C++DLL函数复制
- 是否可以编译使用 .NET DLL 和 GCC 的C++?
- 列出 C# 中的 non-.NET DLL 函数
- 如何为64位应用程序注册.NET DLL
- System.DllNotFoundException in .NET DLL
- 获取传递给子模块(C#.NET dll)中的主模块(VC++ exe)的参数
- 使用JNI集成java和.net dll
- 如何解决"原生DLL libmbusmaster.dll的问题不见了!请将 DLL 文件部署到与 mbusmaster.net.dll 相同的目录中。
- 如何更改.net dll的guid
- 动态加载.NET DLL包装C++DLL
- 使用 CoCreateInstance 从C++调用 COMVisible VB.Net dll
- .Net DLL vs C++ DLL
- 一个C++客户端无法使用我们新的 COM 注册的 .NET .dll加载,另一个客户端可以正常工作
- 如何在 Ubuntu 中将 c++ 编译为 Windows 的 .net Dll 文件
- Calling .NET DLL from Java
- 从本机C++调用.NET dll
- 从ASP调用后端.net dll.. NET Web api
- 从.Net Dll创建.Ocx文件
- 如何创建一个使用AFX库的混合模式CLR . net DLL