我一直在努力写出从c ++ win32console和c ++ dll中消失的解决方案。我终于设法使他们交谈而没有链接器错误(因此我假设它们都是完全托管的c ++ / CLI项目),但是当我运行控制台时,出现以下错误。


在0x03f71849中有未处理的异常
Company.Pins.Bank.Win32Console.exe:
0xC0000005:写入访问冲突
位置0x00000001。


控制台还显示以下内容


未处理的异常:
System.NullReferenceException:对象
引用未设置为的实例
目的。在wmain中的c:... \ win32console.cpp:line
_wmainCRTStartup()处为20


但我认为这是由于未处理的异常。

跟踪此错误以及我可以在以下代码块中返回时发生错误。 (由返回链接的方法似乎可以很好地执行,只是在返回时看起来很糟糕。)以防万一您没有注意到,我自己没有编写以下代码,它是由Visual Studio生成的。

#ifdef WPRFLAG
int wmainCRTStartup(
#else  /* WPRFLAG */
int mainCRTStartup(
#endif  /* WPRFLAG */

#endif  /* _WINMAIN_ */
        void
        )
{
        /*
         * The /GS security cookie must be initialized before any exception
         * handling targetting the current image is registered.  No function
         * using exception handling can be called in the current image until
         * after __security_init_cookie has been called.
         */
        __security_init_cookie();

        return __tmainCRTStartup();
}

#include "stdafx.h"
#include "UInstruction.h"

#define DllExport  __declspec(dllexport)
#define DllImport  __declspec(dllimport)

using namespace System;


编辑:和win32console.cpp代码如下。

//int main(array<System::String ^> ^args)
int _tmain(int argc, _TCHAR* argv[])
{
    auto P2 = (TCHAR *)"3 Barrowstead";
    TCHAR* P3 = (TCHAR *)"3 Barrowstead";
    double* P1;
    P1[0] = 13;

    UserInstruction(P1, P2, P3);
}

最佳答案

您声明一个指针并且不对其进行初始化,因此它不会指向一个对象(它包含一些垃圾地址):

double* P1;


然后,您尝试写入此未初始化的指针指向的位置:

P1[0] = 13;


您不能使用未初始化的变量。在取消引用之前,需要初始化P1指向某个对象。

关于visual-studio-2010 - 为什么我会用C++/CLI编写未处理的异常访问冲突?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5886103/

10-13 06:52