我正在使用Windows 7上的Visual Studio 2015开发一个应用程序.该应用程序有一个C#前端,一个C++ CLR包装器和C++本机代码.
我的应用程序在使用C++本机代码初始化函数作用域的静态变量时因访问冲突而崩溃.但仅限于Windows Server 2003 Enterprise SP2而不是Windows 7或Windows Server 2012.我知道Windows Server 2003不受支持,但我必须将该平台再定位几个月,Visual Studio 2015提供了一个平台工具集来定位它.
我创建了一个可重复的小例子,你可以在最后找到它.
崩溃只发生在涉及的所有三个部分(C#,C++ CLR,C++).如果我删除任何,崩溃就消失了.
崩溃只发生在定义的自定义构造函数上.如果我删除了构造函数,崩溃就消失了.
我不是汇编专家,但对我而言,崩溃是由检查是否需要静态初始化的代码引起的.甚至没有调用构造函数.
我的问题是:为什么它在Windows Server 2003上崩溃?我错过了一些重要的项目设置吗?
Unhandled exception at 0x1000167E (Native.dll) in Managed.exe.dmp: 0xC0000005: Access violation reading location 0x00000000.
Run Code Online (Sandbox Code Playgroud)
// Target framework: .NET Framework 4
// Platform target: x86
using System;
namespace Managed
{
class Program
{
static void Main(string[] args)
{
Console.Write("Press enter to start test...");
Console.ReadLine();
Native.Wrapper wrapper = new Native.Wrapper();
Console.WriteLine("Test was successful");
Console.Write("Press …Run Code Online (Sandbox Code Playgroud)