属性-->C/C++-->预处理器-->添加宏,如下所示: ? 具体过程: 我在调用ShellEx" />
当前位置: 首页 > >

报错C1189 #error: "No Target Architecture"

发布时间:

根本原因:

是因为单独包含了一些windows.h已经包含了的头文件如"fileapi.h","WinUser.h",但是却没有包含windows.h

先说解决方案:

在代码中 加入include? “windows.h” 即可,或者调整顺序,把winows.h放在前面


?


网上的解决方案:

在项目中添加_AMD64_宏(其他三个也可以)也可以解决该问题
具体方法:项目名称右键-->属性-->C/C++-->预处理器-->添加宏,如下所示:

?
具体过程:

我在调用ShellExecute 函数时提示错误 "No Target Architecture",代码简化如下:


#include "stdafx.h"
#include "WinUser.h"
#include
int main()
{
ShellExecute(0, NULL, L"http://www.baidu.com", NULL, NULL, SW_SHOWNORMAL);
return 0;
}

定位错误位置在winnt.h


#if defined(_AMD64_) || defined(_X86_)
#define PROBE_ALIGNMENT( _s ) TYPE_ALIGNMENT( DWORD )
#elif defined(_IA64_) || defined(_ARM_) || defined(_ARM64_)

#define PROBE_ALIGNMENT( _s ) TYPE_ALIGNMENT( DWORD )
#elif !defined(RC_INVOKED)
#error "No Target Architecture"
#endif

原因也很简答,就是没有定义 (_AMD64_) 、(_X86_)这几个宏,编译器检查到,就抛出异常


?


在调用?ShellExecute时,SW_SHOWNORMAL提示找不到,查了下,SW_SHOWNORMAL这玩意是在"WinUser.h"中定义,于是#include "WinUser.h"


"WinUser.h"里面定义了所有 user32.dll 导出的 API 以及各种宏定义,例如代表消息ID 的 WM_* 宏,与 Windows UI 相关的大部分 API 都是在 winuser.h 中定义的。这个文件是被include在了windows.h中的


所以一般都是直接 #include 即可,而上面说到的?(_AMD64_) 、(_X86_)也是在windows.h 中先定义的,所以报错了


在此例中,winuser和?都可以删除,直接包含一个windows.h即可


?


windows.h下的重要的头文件有哪些:

windows.h是一个最重要的头文件,它包含了其他Windows头文件,这些头文件的某些也包含了其他头文件。这些头文件中最重要的和最基本的是:


WINDEF.H 基本数据类型定义
WINNT.H 支持Unicode的类型定义
WINBASE.H Kernel(内核)函数
WINUSER.H 用户界面函数???? //本例中shellexecute就定义在此
WINGDI.H 图形设备接口函数



转载于:https://www.cnblogs.com/kevinWu7/p/10163436.html



友情链接: