Visual Studio 2013:尝试更改从LockResource()获取的变量值时发生访问冲突

Visual Studio 2013:尝试更改从LockResource()获取的变量值时发生访问冲突,c,visual-studio-2010,winapi,visual-studio-2013,C,Visual Studio 2010,Winapi,Visual Studio 2013,我正在将我的项目从Visual studio 2010移动到Visual studio 2013。我发现在VisualStudio2010上运行良好的部分代码在使用2013构建时不起作用。下面是有问题的代码片段的一部分 int DoDialog(UINT id, HWND hwndParent, DLGPROC lpDialogFunc, LPARAM lParamInit) { HGLOBAL hgl = NULL; LPDLGTEMPLATE lpTempla

我正在将我的项目从Visual studio 2010移动到Visual studio 2013。我发现在VisualStudio2010上运行良好的部分代码在使用2013构建时不起作用。下面是有问题的代码片段的一部分

int DoDialog(UINT id, HWND hwndParent, DLGPROC lpDialogFunc, LPARAM lParamInit)
{
    HGLOBAL         hgl = NULL;
    LPDLGTEMPLATE lpTemplate = NULL;
    HRSRC hRC = FindResourceEx(hInst, RT_DIALOG, MAKEINTRESOURCE(id),LANGIDFROMLCID(GetCurrentLocale()));
    hgl = LoadResource(hInst, hRC);
    lpTemplate = (LPDLGTEMPLATE)LockResource(hgl);
    if (hRC && hgl && lpTemplate)
    {
        lpTemplate->dwExtendedStyle |= WS_EX_TOPMOST; // ---> This part of code run without
                                                      // problem in visual studio version 2010 
                                                      // (and older). 

        result = DialogBoxIndirectParam(hInst, lpTemplate, hwndParent, lpDialogFunc, lParamInit);
    }

    return result;
}
当程序试图修改lpTemplate->dwExtendedStyle的值时,会在运行时导致访问冲突。这段代码在VisualStudio2010上运行。 我能做些什么来解决这个问题?
提前感谢。

资源是只读的;如果要修改内存中的一个,请先复制它

int DoDialog(UINT id, HWND hwndParent, DLGPROC lpDialogFunc, LPARAM lParamInit)
{
    HGLOBAL         hgl = NULL;
    LPDLGTEMPLATE lpTemplate = NULL, pTemplateCopy = NULL;
    DWORD dwSize;
    HRSRC hRC = FindResourceEx(hInst, RT_DIALOG, MAKEINTRESOURCE(id),LANGIDFROMLCID(GetCurrentLocale()));
    hgl = LoadResource(hInst, hRC);
    lpTemplate = (LPDLGTEMPLATE)LockResource(hgl);

    // make a writeable copy of the resource
    dwSize = SizeofResource(hInst, hRC);
    if (pTemplateCopy = malloc(dwSize))
    {
        memcpy(pTemplateCopy, lpTemplate, dwSize);

        // now do something with the pTemplateCopy
        // remember to call free(pTemplateCopy) when done
    }

    ...
}

谢谢你,乔纳森。它可以工作:)仍然想知道为什么它以前在VS-2013之前的版本中可以工作。@someone\u smiley:我不认为编译器会有什么不同,更可能的是它在旧版本的Windows(例如XP)上工作。我在Windows 7上测试了这两个版本,只有在从VS 2013构建时才会出现此问题。无论如何,谢谢你:)