C++ cli 迁移C++;从.NET 4.0到4.5的CLI包装导致Windows Server 2012 R2上出现winsock错误 我已经为我们使用的通信中间件构建了一个C++ CLI包装器。 该包装器已在.NET4.5中使用,在Windows7和WindowsServer2008R2中运行良好。但在Windows Server 2012 R2中,它会因mswsock.dll中的“访问冲突”错误而崩溃

C++ cli 迁移C++;从.NET 4.0到4.5的CLI包装导致Windows Server 2012 R2上出现winsock错误 我已经为我们使用的通信中间件构建了一个C++ CLI包装器。 该包装器已在.NET4.5中使用,在Windows7和WindowsServer2008R2中运行良好。但在Windows Server 2012 R2中,它会因mswsock.dll中的“访问冲突”错误而崩溃,c++-cli,.net-4.5,winsock,windows-server-2012-r2,migrating,C++ Cli,.net 4.5,Winsock,Windows Server 2012 R2,Migrating,有趣的是,如果我将包装器和测试应用程序构建到目标.NET4.0,它就会工作。但当我将它们重新定位到.NET4.5.x时,它会触发异常 我曾试图调查安全性、强命名、热修复程序.NET,但毫无用处 让我烦恼的是,它在.NET4.0的服务器2012 R2上工作,而不是在4.5.x上。显然,当本机代码访问winsock API时,就会发生访问冲突 是否有人遇到过相同的问题,或类似的服务器2012.NET 4.0与4.5.x的连线问题 在运行.NET 4.5应用程序时,Server 2012中是否有任何安

有趣的是,如果我将包装器和测试应用程序构建到目标.NET4.0,它就会工作。但当我将它们重新定位到.NET4.5.x时,它会触发异常

我曾试图调查安全性、强命名、热修复程序.NET,但毫无用处

让我烦恼的是,它在.NET4.0的服务器2012 R2上工作,而不是在4.5.x上。显然,当本机代码访问winsock API时,就会发生访问冲突

是否有人遇到过相同的问题,或类似的服务器2012.NET 4.0与4.5.x的连线问题

在运行.NET 4.5应用程序时,Server 2012中是否有任何安全机制被激活,而对于4.0应用程序,这些机制不处于活动状态。特别是关于CLI模块


技术:本机代码是使用VS2010编译的,因此包装器是在VS2012中使用该编译器编译的。编辑C++ CLI项目文件以设置所需的框架目标。测试应用程序是用C#编写的

所以我们最终找到了bug。第三方通信中间件在64位版本中有一个bug。一种指针,该指针被再次转换为long和back,导致64位寻址错误

我不知道为什么这是在使用.NET4.5时首先引起的。我觉得带有.NET4.5的Server2012 R2总是在32位地址范围之外分配内存。至少在我们的试验台上。它总是出现访问冲突错误

带有.NET 4.5的Server 2012 R2始终在32位地址范围外分配内存

是的,在exe文件上使用Dumpbin.exe/headers时,这非常明显。我将发布它显示的输出的相关部分:

        4.00 operating system version
        0.00 image version
        6.00 subsystem version                      // <== here
           0 Win32 version
        8000 size of image
         200 size of headers
           0 checksum
           3 subsystem (Windows CUI)
        8560 DLL characteristics
               High Entropy Virtual Addresses       // <=== here
               Dynamic base
               NX compatible
               No structured exception handler
               Terminal Server Aware
4.00操作系统版本
0.00图像版本
6.00子系统版本//