小编Bac*_*one的帖子

静态初始化时访问冲突

我正在使用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)

Visual C#控制台应用程序"Managed.exe"

Program.cs中

// 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)

c++ c++-cli visual-c++

16
推荐指数
1
解决办法
4214
查看次数

标签 统计

c++ ×1

c++-cli ×1

visual-c++ ×1