为什么会重定义呢?
stdafx.h 包含了
#include "Global.h"
#include "externs.h"
Global.h :
#pragma once
LPWSTR pSysDir = NULL;
LPWSTR pAppDir = NULL;
externs.h:
#pragma once
extern LPWSTR pSysDir;
extern LPWSTR pAppDir;
连接的时候就出现了:
inject.obj : error LNK2005: "unsigned short * pSysDir" (?pSysDir@@3PAGA) 已经在 stdafx.obj 中定义
inject.obj : error LNK2005: "unsigned short * pAppDir" (?pAppDir@@3PAGA) 已经在 stdafx.obj 中定义
[解决办法]
那你就不要在头文件中定义
extern LPWSTR pSysDir;
extern LPWSTR pAppDir;
[解决办法]
#pragma once 只是避免在同一个CPP或者C文件中多次#include同一个头文件,不是说在一个CPP或者C文件中#include了,再在其它CPP或者C文件中#include就不起作用,因为每个CPP或者C文件都是单独编译的。
加了extern的是声明,不是定义;同一个变量声明可以多次,定义只能一次
extern LPWSTR pSysDir;extern LPWSTR pAppDir; 可以放到头文件
LPWSTR pSysDir = NULL; LPWSTR pAppDir = NULL;不要放到头文件