15.12.2013, 14:34. Просмотров 295. Ответов 4
Здравствуй CyberForum! У меня проблема с использованием нескольких cpp файлов.
Есть три файла: core.cpp, core.h и SThread.cpp. При этом Сore.cpp и SThread.cpp используют глобальные переменные и прототипы объявленные в core.h. Вот содержание core.h:
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| #ifndef __ClearSky
#define __ClearSky
#include <string>
#include <Windows.h>
#include <windowsx.h>
#include <fstream>
#include <gl\GL.h>
#include <strsafe.h>
//Синхронизирует работу потоков
HANDLE EventHandler;
//Прототипы
void DrawMarkerOnPosition(int x, int y, HWND hwnd);
BOOL WINAPI InitThreads();
void WINAPI CloseThreads();
DWORD SoundThreadEntryPoint();
void ShowMessage(int x, int y, LPWSTR text);
void ShowError();
DWORD DoTestThread();
void DrawOnDesktop();
//Тут глобальные переменные
CRITICAL_SECTION SYNC_stuff;
bool bDraw;
bool bUpdate;
#endif |
|
А вот пример инклуда, но тут все просто. Файл SThread.cpp :
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
| #include "Core.h"
DWORD SoundThreadEntryPoint()
{
SoundThreadStart:
DWORD result = WaitForSingleObject(EventHandler, INFINITE);
if (result == 0xffffffff) ShowError();
//Start load DLL test code
HMODULE TestDLLModule = GetModuleHandle(L"binkw32");
if (TestDLLModule == NULL)
{
ShowMessage(100, 100, L"Module not loaded yet, try to load...");
ResetEvent(EventHandler);
TestDLLModule = LoadLibrary(L"binkw32");
if (TestDLLModule == NULL)
{
ShowError();
}
else
{
ShowMessage(100, 150, L"Module load complete");
}
goto SoundThreadStart;
}
else
{
ResetEvent(EventHandler);
ShowMessage(100, 200, L"Module already loaded, calling function!");
FARPROC RADTimerRead = GetProcAddress(TestDLLModule, "_RADTimerRead@0");
if (RADTimerRead == NULL)
{
ShowError();
}
LPWSTR message = new WCHAR[30];
while (true)
{
EnterCriticalSection(&SYNC_stuff);
if (bUpdate == false)
{
LeaveCriticalSection(&SYNC_stuff);
break;
}
LeaveCriticalSection(&SYNC_stuff);
int FinalResult = RADTimerRead();
wsprintf(message, L"Returning value is: %d", FinalResult);
ShowMessage(100, 250, message);
Sleep(5);
}
delete[] message;
goto SoundThreadStart;
}
return 0;
} |
|
Файл core.cpp очень большой, и там такая же строка как и в SThread.cpp в начале

.
Компилятор, вернее, линковщик ругается почему-то конкретно на глобальные переменные, объявленные в core.h.
Если core.cpp и SThread.cpp объединить в один файл, то все работает, но получается сплошная куча кода -_-.
Помогите пожалуйста!