我有3个标题
DirectX.h
,Draws.h
,Memory.h
d
每个函数在其相应的.cpp中都有一个定义,因此除了DirectX.h ofc之外,它被排除在外
我尝试了一套解决方案来修复它但没有成功,就像在标题中没有including
stdafx.h一样。
三个小片段
Memory.h
#pragma once
#include "stdafx.h"
Class Memory
{
foo..
};
extern Memory *gMemory;
Draws.h
#pragma once
#include "stdafx.h"
Class Drawing
{
foo..
};
extern Drawing *Draw;
DirectX.h
#pragma once
#include "stdafx.h"
struct Direct
{
foo
};
extern Direct *DirectX;
错误
1>dllmain.obj : error LNK2001: unresolved external symbol "class Memory * gMemory" (?gMemory@@3PAVMemory@@A)
1>dllmain.obj : error LNK2001: unresolved external symbol "class Drawing * Draw" (?Draw@@3PAVDrawing@@A)
1>dllmain.obj : error LNK2001: unresolved external symbol "struct Direct * DirectX" (?DirectX@@3PAUDirect@@A)
1>Draws.obj : error LNK2001: unresolved external symbol "struct Direct * DirectX" (?DirectX@@3PAUDirect@@A)
stdafx.h中
#include <windows.h>
#include <iostream>
#include <d3d9.h>
#include <d3dx9.h>
#include "Memory.h"
#include "Draws.h"
#include "DirectX.h"
dllmain.cpp 我使用extern的唯一部分是
gMemory->FindPattern(..);
if (!DirectX->Line)
{
D3DXCreateLine(pDevice, &DirectX->Line);
}
Draw->Circle(foo);
答案 0 :(得分:0)
extern
关键字意味着,该对象在其他地方定义(在其他编译单元中,在链接的静态库中),简单来说,它是对象的链接,在某处实例化(创建) else,但可以在当前的编译单元中使用。
在你dllmain.cpp
中,你应该在全局(例如)范围内声明变量:
// Declaration of pointers.
Drawing* Draw = NULL;
Direct* DirectX = NULL;
Memory* gMemory = NULL;
和int dllmain()
(或任何主要功能):
// Initialization of pointers with newly created objects:
Draw = new Drawing();
DirectX = new Direct();
gMemory = new Memory();