Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 互操作程序集引用.NET framework的哪些功能?_C++_.net_Interop_Tlbimp_Tlbexp - Fatal编程技术网

C++ 互操作程序集引用.NET framework的哪些功能?

C++ 互操作程序集引用.NET framework的哪些功能?,c++,.net,interop,tlbimp,tlbexp,C++,.net,Interop,Tlbimp,Tlbexp,我们有一个包含大约90个项目的VisualStudio解决方案。大多数都是用DLL文件构建的,有些是用C++编写的,有些是用C语言编写的。这些项目通过COM相互通信。我们使用TLBEXP生成一些C项目的TLB文件(C++项目中引用的文件)。我们使用TLBIMP来生成C++项目的互操作DLL。我没有完全深入研究这个主题,但是我认为,互操作文件只是定义C++类的接口,使它们可以从其他项目中使用,对吗? 现在,问题是:为了将整个解决方案升级到Visual Studio 2015,并让它根据.NET 4

我们有一个包含大约90个项目的VisualStudio解决方案。大多数都是用DLL文件构建的,有些是用C++编写的,有些是用C语言编写的。这些项目通过COM相互通信。我们使用TLBEXP生成一些C项目的TLB文件(C++项目中引用的文件)。我们使用TLBIMP来生成C++项目的互操作DLL。我没有完全深入研究这个主题,但是我认为,互操作文件只是定义C++类的接口,使它们可以从其他项目中使用,对吗? 现在,问题是:为了将整个解决方案升级到Visual Studio 2015,并让它根据.NET 4.6.1进行编译,我使用JetBrains的dotPeek检查了生成的程序集。我可以看到,所有的C项目都正确使用.NET4.61,C++ DLL本身是本地的,不引用任何.NET。现在,让我吃惊的是,DoPePek告诉我,互操作DLL(这是C++项目导致的)引用了.NET 4。 经过一天的“精彩”尝试,我试图让他们参考.NET4.6.1,并进行了大量的研究,最终我没有找到任何方法让interops参考.NET4.6.1。这可能吗?我目前的猜测是,像这样生成的所有互操作DLL只引用基本的.NET4.0,因为它使用与.NET4.6.1相同的CLR


是这样吗?应该可以在安装了.NET Framework 4.6.1的任何系统上执行程序集,不是吗?

您从dotPeek获得了错误信息。它不会告诉您它是如何确定.NET版本的目标的。它可以特定于编译器生成的.NET程序集。因为它会自动将插入到程序集中,所以它会说明在生成项目时选择的.NET版本

但是互操作程序集不指定.NET版本,主要是因为它不是由编译器生成的。请注意,在运行Tlbimp.exe时从未指定版本。而且不能。dotPeek所能弄清楚的是,它的目标是.NET4,这是由元数据格式决定的。没有比这更具体的了

这并不重要,因为互操作库不使用.NET Framework功能。该库的唯一一点是,您的程序可以使用COM组件功能。所以dotPeek报告的版本号并不重要;任何.NET4.x框架都可以使用该库


您没有真正的问题。

您从dotPeek获得了错误信息。它不会告诉您它是如何确定.NET版本的目标的。它可以特定于编译器生成的.NET程序集。因为它会自动将插入到程序集中,所以它会说明在生成项目时选择的.NET版本

但是互操作程序集不指定.NET版本,主要是因为它不是由编译器生成的。请注意,在运行Tlbimp.exe时从未指定版本。而且不能。dotPeek所能弄清楚的是,它的目标是.NET4,这是由元数据格式决定的。没有比这更具体的了

这并不重要,因为互操作库不使用.NET Framework功能。该库的唯一一点是,您的程序可以使用COM组件功能。所以dotPeek报告的版本号并不重要;任何.NET4.x框架都可以使用该库

你没有真正的问题