visual c++ 2012 应用程序无法在 windows xp 下运行 - 已更新

Posted

技术标签:

【中文标题】visual c++ 2012 应用程序无法在 windows xp 下运行 - 已更新【英文标题】:visual c++ 2012 application won't run under windows xp - updated 【发布时间】:2013-10-27 16:07:44 【问题描述】:

大家好,欢迎大家

我正在使用 Visual c++ 2012 Ultimate 和更新 3,我有一个项目应该在 xp Pack 3 环境中执行,我按照此博客中的说明更改工具集 Windows XP Targeting with visual studio 2012

在我的 windows xp 机器上,我安装了 svcedit.exe visual 2012 update 3,但问题是代码无法运行,并且根本没有显示任何错误。

我真的不知道问题是什么!

示例 - 源文件

ma​​in.cpp

#include <WindowsX.h>
#include <Windows.h>
#include <tchar.h>
#include <stdio.h>

#include "resource1.h"

#define my_PROCESS_MESSAGE(hWnd, message, fn)   \
    case(message):  \
        return( \
            SetDlgMsgResult(hWnd, uMsg, \
                HANDLE_##message((hWnd), (wParam), (lParam), (fn)) ))   \

LRESULT CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);
BOOL Cls_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam);
void Cls_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify);

int WINAPI _tWinMain(   HINSTANCE   hInstance,
                HINSTANCE,
                LPTSTR,
                int         iCmdShow    )

    DialogBoxParam( hInstance,
            MAKEINTRESOURCE(IDD_DLLINJECTOR),
            NULL,
            (DLGPROC) DlgProc,
            NULL
            );

    return 0;


LRESULT CALLBACK DlgProc(   HWND    hWnd,
                            UINT    uMsg,
                            WPARAM  wParam,
                            LPARAM  lParam  )

    switch (uMsg)
    
        my_PROCESS_MESSAGE(hWnd, WM_INITDIALOG, Cls_OnInitDialog);
        my_PROCESS_MESSAGE(hWnd, WM_COMMAND, Cls_OnCommand);

    default:
        break;
    

    return FALSE;


BOOL Cls_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)

    SetDlgItemText( hwnd,
            IDC_DEBUG,
            _T("Zirek: Some text\r\n")
            );

    return TRUE;


void Cls_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)

    switch (id)
    
    case IDCANCEL:
        EndDialog(hwnd, id);
        break;

    default:
        break;
    

    return;

resource1.h

//NO_DEPENDENCIES
// Microsoft Visual C++ generated include file.
// Used by Resource.rc
//
#define IDCANCEL2                       3
#define IDCANCEL3                       4
#define IDD_DIALOG1                     101
#define IDD_DLLINJECTOR                 101
#define IDC_TREE1                       1001
#define IDC_EDIT1                       1002
#define IDC_DEBUG                       1003
#define IDC_LIST1                       1004
#define IDC_EDIT4                       1005
#define IDC_EDIT3                       1007

// Next default values for new objects
// 
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        102
#define _APS_NEXT_COMMAND_VALUE         40001
#define _APS_NEXT_CONTROL_VALUE         1006
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif

资源.rc

// Microsoft Visual C++ generated resource script.
//
#include "resource1.h"

#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"

/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////
// English (United States) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US

#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//

1 TEXTINCLUDE 
BEGIN
    "resource1.h\0"
END

2 TEXTINCLUDE 
BEGIN
    "#include ""afxres.h""\r\n"
    "\0"
END

3 TEXTINCLUDE 
BEGIN
    "\r\n"
    "\0"
END

#endif    // APSTUDIO_INVOKED


/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//

IDD_DLLINJECTOR DIALOGEX 0, 0, 559, 255
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "DLL Injector"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
    PUSHBUTTON      "&Close",IDCANCEL,494,54,50,14
    CONTROL         "",IDC_TREE1,"SysTreeView32",WS_BORDER | WS_HSCROLL | WS_TABSTOP,7,7,125,221,WS_EX_CLIENTEDGE
    EDITTEXT        IDC_EDIT1,7,234,125,14,ES_AUTOHSCROLL,WS_EX_DLGMODALFRAME | WS_EX_CLIENTEDGE
    EDITTEXT        IDC_DEBUG,138,149,414,99,ES_MULTILINE | ES_AUTOHSCROLL,WS_EX_CLIENTEDGE
    CONTROL         "",IDC_LIST1,"SysListView32",LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,138,7,125,137,WS_EX_CLIENTEDGE
    CTEXT           "Zirek\r\nAT4RE\r\nDLL Injector",IDC_STATIC,486,23,66,26,0,WS_EX_CLIENTEDGE
    EDITTEXT        IDC_EDIT3,269,130,226,14,ES_AUTOHSCROLL,WS_EX_DLGMODALFRAME
    PUSHBUTTON      "&Inject",IDCANCEL2,494,74,50,29
    EDITTEXT        IDC_EDIT4,269,7,211,117,ES_AUTOHSCROLL,WS_EX_CLIENTEDGE
    DEFPUSHBUTTON   "&Open",IDCANCEL3,502,130,50,14
END


/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//

#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
BEGIN
    IDD_DLLINJECTOR, DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 552
        TOPMARGIN, 7
        BOTTOMMARGIN, 248
    END
END
#endif    // APSTUDIO_INVOKED

#endif    // English (United States) resources
/////////////////////////////////////////////////////////////////////////////



#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//


/////////////////////////////////////////////////////////////////////////////
#endif    // not APSTUDIO_INVOKED

代码在 windows 8 和 windows 7 上正常运行,但在 windows xp 中,当我单击应用程序时,什么都没有发生。

最好, 齐雷克

【问题讨论】:

我不确定您希望我们做什么来帮助您。我们无法获得任何帮助调试问题的方法,因为我们没有您的任何代码,也没有关于它的作用或依赖于什么的信息,也没有任何信息可用于尝试解决问题。您认为我们究竟在多大程度上可以帮助实现零信息或访问? 抱歉,包含源文件 您似乎从未调用过使用树控件所需的InitCommonControls 【参考方案1】:

您需要在要运行该应用程序的任何机器上安装VC++ 2012 Redistributables。确保下载并安装与您的 Visual Studio 版本匹配的可再发行组件,包括更新(例如,如果您有 VS2012 Update 2,则分发该版本,而不是 VS2013 Update 3 的可再发行组件)。

【讨论】:

【参考方案2】:

我也不知道问题出在哪里,但总的来说使用dependencywalker 是一个好的开始。它会告诉您您的应用程序是否依赖于 winxp 中不可用的功能,或者您是否忘记部署一些运行时 dll。

【讨论】:

我分享源代码,我只使用windows api,我认为问题在我的资源文件中,但我不知道如何阅读它。

以上是关于visual c++ 2012 应用程序无法在 windows xp 下运行 - 已更新的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studios 2012 更改运行时库会导致链接错误,使用 C++

c++ 函数模板的问题,请看代码,为啥去掉注释后,visual studio 2012会无法运行。

使用 Visual Studio 2012 Profiler 分析 C++

无法使用 /clr 选项从 Visual C++ 项目加载 CLR

无法在 Visual Studio 2010 中构建 C++ 项目

在 Visual Studio 2012 中使用 GUI 和数据库的 Windows 应用程序