Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

07.10.2010, 02:20

Mal wieder: 3D-Spiele-Programmierung unter Win 7, VC++ 2010

Hallo zusammen,

ich weiß, es muß euch schon zu den Ohren heraus kommen, aber:

Ich scheitere komplett bei dem Versuch mit dem Buch überhaupt zu beginnen :-(

Das Problem mit der DxErr(9).h habe ich gelesen und keinen Ansatz gefunden, das ordentlich zu umschiffen.
Google und die Foren-Suche habe ich (erfolglos) bemüht.
Ich habe viel gelesen, aber nichts gefunden, das auf mein niedriges Niveau herunter reichte.

Zugegeben, bin noch frischer C++ Anfänger
(das Buch C++ für Spieleprogrammierer habe ich durch - hat gut geklappt)
Jedoch dieses Gehampel mit den inc-, und lib-Verzeichnissen und von Version zu Version umbenannten Dateien (DirectX) die nicht rückwertskompatibel sind, bringt mich zum kochen. Was muß wohin kopiert werden (oder lieber doch nicht...), wieso müssen verschiedene Teile (TriBase.cpp) vorkompiliert werden, bzw. zuerst aus älteren Projektversionen konerviert werden? (vgl. 1.4.4.3f)
An der Stelle ist das Buch leider (verständlicherweise) total veraltet. (Ich habe die 3. Auflage)
Das Konzept mit include und lib ist verstanden, aber ich bring's nicht zusammen ein lauffähiges Projekt für die TriBase zu erstellen.

So, genug gelästert!

Ich möchte die Erfahrenen von euch bitten mir zu Helfen das Teil ans fliegen zu bekommen.
Am coolsten wäre natürlich eine Step-By-Step-Anleitung. Sollte sich niemand finden der das fertig bringt, mache ich das, wenn ich verstanden habe, worauf es ankommt.
Ich bin mir sicher es sind nicht wenige Leute unterwegs, die sich an dem Teil die Zähne ausbeißen.

Das habe ich bisher gamacht:
- den TriBase-Ordner auf die Festplatte kopiert
- Neues Projekt erstellt und die *.h und *.cpp Dateine dem Projekt hinzugefügt, sodass sie im Projektmappenexplorer erscheinen
- die Eigenschaften des Projekts angepasst (siehe ganz unten)
- Kopie der TriBaseD.dll und TriBase.dll von der CD ins Projektverseichnis wo auch die Sourceen liegen und zusätzlich nach .../TriBase/lib (eigentlich nur aus Verzweiflung, ohne mir viel gedanken dazu zu machen)
- Versuch zu kompilieren

Ergebnis:
Bereits im Quelltext wird tbInit() rot unterstrichen.
tbInit(): Eine als dllimport deklarierte Funktioin darf nicht definiert werden.

C-/C++-Quelltext

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
1>------ Erstellen gestartet: Projekt: TriBase_Buch, Konfiguration: Debug Win32 ------
1>  TerrainEditor.cpp
1>  OctreeCompiler.cpp
1>  tb3DSReader.cpp
1>  ModelConverter.cpp
1>  Import3DS.cpp
1>  CreateBitmapFont.cpp
1>  tbVideo.cpp
1>src\tbVideo.cpp(399): warning C4273: 'tbVideo::tbVideo': Inkonsistente DLL-Bindung.
1>          c:\users\marco\documents\visual studio 2010\projects\tribase\include\tbVideo.h(78): Siehe vorherige Definition von '{ctor}'
1>src\tbVideo.cpp(408): warning C4273: 'tbVideo::Init': Inkonsistente DLL-Bindung.
1>          c:\users\marco\documents\visual studio 2010\projects\tribase\include\tbVideo.h(82): Siehe vorherige Definition von 'Init'
1>src\tbVideo.cpp(593): warning C4273: 'tbVideo::Exit': Inkonsistente DLL-Bindung.
1>          c:\users\marco\documents\visual studio 2010\projects\tribase\include\tbVideo.h(83): Siehe vorherige Definition von 'Exit'
1>src\tbVideo.cpp(615): warning C4273: 'tbVideo::Play': Inkonsistente DLL-Bindung.
1>          c:\users\marco\documents\visual studio 2010\projects\tribase\include\tbVideo.h(84): Siehe vorherige Definition von 'Play'
1>src\tbVideo.cpp(638): warning C4273: 'tbVideo::Pause': Inkonsistente DLL-Bindung.
1>          c:\users\marco\documents\visual studio 2010\projects\tribase\include\tbVideo.h(85): Siehe vorherige Definition von 'Pause'
1>src\tbVideo.cpp(648): warning C4273: 'tbVideo::Stop': Inkonsistente DLL-Bindung.
1>          c:\users\marco\documents\visual studio 2010\projects\tribase\include\tbVideo.h(86): Siehe vorherige Definition von 'Stop'
1>src\tbVideo.cpp(659): warning C4273: 'tbVideo::Process': Inkonsistente DLL-Bindung.
1>          c:\users\marco\documents\visual studio 2010\projects\tribase\include\tbVideo.h(87): Siehe vorherige Definition von 'Process'
1>src\tbVideo.cpp(684): warning C4273: 'tbVideo::SetCurrentPosition': Inkonsistente DLL-Bindung.
1>          c:\users\marco\documents\visual studio 2010\projects\tribase\include\tbVideo.h(88): Siehe vorherige Definition von 'SetCurrentPosition'
1>src\tbVideo.cpp(703): warning C4273: 'tbVideo::GetCurrentPosition': Inkonsistente DLL-Bindung.
1>          c:\users\marco\documents\visual studio 2010\projects\tribase\include\tbVideo.h(89): Siehe vorherige Definition von 'GetCurrentPosition'
1>src\tbVideo.cpp(721): warning C4273: 'tbVideo::SetPlaybackRate': Inkonsistente DLL-Bindung.
1>          c:\users\marco\documents\visual studio 2010\projects\tribase\include\tbVideo.h(90): Siehe vorherige Definition von 'SetPlaybackRate'
1>src\tbVideo.cpp(736): warning C4273: 'tbVideo::GetPlaybackRate': Inkonsistente DLL-Bindung.
1>          c:\users\marco\documents\visual studio 2010\projects\tribase\include\tbVideo.h(91): Siehe vorherige Definition von 'GetPlaybackRate'
1>src\tbVideo.cpp(753): warning C4273: 'tbVideo::NextFrame': Inkonsistente DLL-Bindung.
1>          c:\users\marco\documents\visual studio 2010\projects\tribase\include\tbVideo.h(92): Siehe vorherige Definition von 'NextFrame'
1>  tbVertexBuffer.cpp

... so geht es noch eine Weile weiter...

1>          c:\users\marco\documents\visual studio 2010\projects\tribase\include\tbButtonHandler.h(42): Siehe vorherige Definition von 'Exit'
1>src\tbButtonHandler.cpp(86): warning C4273: 'tbButtonHandler::SetButtonStates': Inkonsistente DLL-Bindung.
1>          c:\users\marco\documents\visual studio 2010\projects\tribase\include\tbButtonHandler.h(43): Siehe vorherige Definition von 'SetButtonStates'
1>  TriBase.cpp
1>src\TriBase.cpp(60): error C2491: 'tbInit': Definition von Funktion für dllimport nicht zulässig
1>src\TriBase.cpp(112): error C2491: 'tbExit': Definition von Funktion für dllimport nicht zulässig
1>src\TriBase.cpp(171): error C2491: 'tbDoMessageLoop': Definition von Funktion für dllimport nicht zulässig
1>src\TriBase.cpp(255): error C2491: 'tbSetAppActive': Definition von Funktion für dllimport nicht zulässig
1>  Code wird generiert...
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========


(Das habe ich wegbekommen, indem ich unter "#pragma once" folgendes eingefügt habe "#define TRIBASE_EXPORTS". Ich habe leider keine Ahnung ob das toll ist ?( )

Dann kompiliert er eine Weile am den Sourcen herum und endet mit einer Fehlermeldung die mir garnichts sagt.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1>------ Erstellen gestartet: Projekt: TriBase_Buch, Konfiguration: Debug Win32 ------
1>  tbUtils.cpp
1>  tbSpriteEngine.cpp

... hier kommen noch eine Menge Dateinamen ...

1>  tbButtonHandler.cpp
1>  Code wird generiert...
1>ModelConverter.obj : error LNK2005: "int __stdcall MainDlgProc(struct HWND__ *,unsigned int,unsigned int,long)" (?MainDlgProc@@YGHPAUHWND__@@IIJ@Z) ist bereits in CreateBitmapFont.obj definiert.
1>ModelConverter.obj : error LNK2005: _WinMain@16 ist bereits in CreateBitmapFont.obj definiert.
1>OctreeCompiler.obj : error LNK2005: "unsigned long g_dwTotalNumIndices" (?g_dwTotalNumIndices@@3KA) ist bereits in ModelConverter.obj definiert.
1>PWEncrypt.obj : error LNK2005: "int __stdcall MainDlgProc(struct HWND__ *,unsigned int,unsigned int,long)" (?MainDlgProc@@YGHPAUHWND__@@IIJ@Z) ist bereits in CreateBitmapFont.obj definiert.
1>PWEncrypt.obj : error LNK2005: _WinMain@16 ist bereits in CreateBitmapFont.obj definiert.
1>TerrainEditor.obj : error LNK2005: "struct HWND__ * g_hMainDlg" (?g_hMainDlg@@3PAUHWND__@@A) ist bereits in ModelConverter.obj definiert.
1>TerrainEditor.obj : error LNK2005: "void __cdecl UpdateDialogTitle(void)" (?UpdateDialogTitle@@YAXXZ) ist bereits in ModelConverter.obj definiert.
1>TerrainEditor.obj : error LNK2005: "int __stdcall MainDlgProc(struct HWND__ *,unsigned int,unsigned int,long)" (?MainDlgProc@@YGHPAUHWND__@@IIJ@Z) ist bereits in CreateBitmapFont.obj definiert.
1>TerrainEditor.obj : error LNK2005: _WinMain@16 ist bereits in CreateBitmapFont.obj definiert.
1>     Bibliothek "C:\Users\Sleepwalker\Documents\Visual Studio 2010\Projects\TriBase\Debug\TriBase_Buch.lib" und Objekt "C:\Users\Sleepwalker\Documents\Visual Studio 2010\Projects\TriBase\Debug\TriBase_Buch.exp" werden erstellt.
1>CVTRES : fatal error CVT1100: Doppelte Ressource. type:ICON, name:1, language:0x0407
1>LINK : fatal error LNK1123: Fehler bei der Konvertierung in COFF: Datei ist ungültig oder beschädigt.
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========


Und damit verließen mich die Ideen, was man noch versuchen könnte.

Ich könnte mir vorstellen, dass ich weiter komme, wenn ich dieses DLL-Im-, Export in den Griff bekomme.
Nun bin ich aber am Ende.

Ich habe mir Mühe gegeben euch so viele Infos zu geben wie ich kann.
Wenn mehr benötigt wird, sagt bescheid.

Wer traut sich? :huh:

Gruß,
Sleepwalker

-----------------------------------

Das ist meine Umgebung:

Windows 7 64bit
VC++ 2010
Microsoft DirectX SDK (June 2010)
Microsoft Windows SDK v7.1

Projekteigenschaften:

-- VC++-Verzeichnisse
---- Bibliotheks-Verzeichnisse
(pfad\zu\)Microsoft_SDKs\DirectX\Lib\x86
(pfad\zu\)Visual Studio 2010\Projects\TriBase\Lib
$(VCInstallDir)lib
$(VCInstallDir)atlmfc\lib
$(WindowsSdkDir)lib
$(FrameworkSDKDir)\lib

---- Include-Verzeichnisse
(pfad\zu\)Visual Studio 2010\Projects\TriBase\Include\DShowBaseClasses
(pfad\zu\)Visual Studio 2010\Projects\TriBase\Include
(pfad\zu\)Microsoft_SDKs\DirectX\Include
$(VCInstallDir)include
$(VCInstallDir)atlmfc\include
$(WindowsSdkDir)include
$(FrameworkSDKDir)\include


-- Linker
---- Zusatzliche Abhängigkeiten
TriBase.lib;
DxErr.lib;
(und der Standard der bei der Installation automatisch gesetzt wird)

2

07.10.2010, 02:48

Eine kleine Ergänzung:

Nach dem mich der Compilre darauf gestoßen hat und ich darüber auch im Forum gelesen habe, habe ich in den *.rc-Dateien folgendes gemacht:

C-/C++-Quelltext

1
2
3
//#include "mfc/afxres.h"
#include "windows.h"
#define IDC_STATIC -1


Damit kam folgende Fehlermeldung:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1>------ Erstellen gestartet: Projekt: TriBase_Buch, Konfiguration: Debug Win32 ------
1>ModelConverter.obj : error LNK2005: "int __stdcall MainDlgProc(struct HWND__ *,unsigned int,unsigned int,long)" (?MainDlgProc@@YGHPAUHWND__@@IIJ@Z) ist bereits in CreateBitmapFont.obj definiert.
1>ModelConverter.obj : error LNK2005: _WinMain@16 ist bereits in CreateBitmapFont.obj definiert.
1>OctreeCompiler.obj : error LNK2005: "unsigned long g_dwTotalNumIndices" (?g_dwTotalNumIndices@@3KA) ist bereits in ModelConverter.obj definiert.
1>PWEncrypt.obj : error LNK2005: "int __stdcall MainDlgProc(struct HWND__ *,unsigned int,unsigned int,long)" (?MainDlgProc@@YGHPAUHWND__@@IIJ@Z) ist bereits in CreateBitmapFont.obj definiert.
1>PWEncrypt.obj : error LNK2005: _WinMain@16 ist bereits in CreateBitmapFont.obj definiert.
1>TerrainEditor.obj : error LNK2005: "struct HWND__ * g_hMainDlg" (?g_hMainDlg@@3PAUHWND__@@A) ist bereits in ModelConverter.obj definiert.
1>TerrainEditor.obj : error LNK2005: "void __cdecl UpdateDialogTitle(void)" (?UpdateDialogTitle@@YAXXZ) ist bereits in ModelConverter.obj definiert.
1>TerrainEditor.obj : error LNK2005: "int __stdcall MainDlgProc(struct HWND__ *,unsigned int,unsigned int,long)" (?MainDlgProc@@YGHPAUHWND__@@IIJ@Z) ist bereits in CreateBitmapFont.obj definiert.
1>TerrainEditor.obj : error LNK2005: _WinMain@16 ist bereits in CreateBitmapFont.obj definiert.
1>     Bibliothek "C:\Users\Sleepwalker\Documents\Visual Studio 2010\Projects\TriBase\Debug\TriBase_Buch.lib" und Objekt "C:\Users\Sleepwalker\Documents\Visual Studio 2010\Projects\TriBase\Debug\TriBase_Buch.exp" werden erstellt.
1>CVTRES : fatal error CVT1100: Doppelte Ressource. type:ICON, name:1, language:0x0407
1>LINK : fatal error LNK1123: Fehler bei der Konvertierung in COFF: Datei ist ungültig oder beschädigt.
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========


Gute Nacht,
Sleepwalker

3

07.10.2010, 15:59

Ein neuer Tag ein neuer Start


4

07.10.2010, 16:10

Ein neuer Tag ein neuer Start

Hallo nochmal,

also ich habe heute nochmal neu angefangen, nachdem ich folgendes Thema gefunden habe:
https://www.spieleprogrammierer.de/index…d&threadID=4810
(Hab ich gestern nicht gefunden :cursing: )

Es sind die DX-SDK x86 Libs eingebunden, als Zielmaschine ist auch ein x86 eingestellt.

---- Zus. Abhängigkeiten:
d3d9.lib
d3dx9d.lib
dinput8.lib
dsound.lib
strmiids.lib
strmbased.lib
dxerr9.lib
dxerr.lib
dxguid.lib
winmm.lib
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
comctl32.lib
comdlg32.lib
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib

---- Geerbte:
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
comdlg32.lib
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
odbc32.lib
odbccp32.lib

(Copy&Paste aus den Einstellungen)


C-/C++-Quelltext

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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
1>------ Neues Erstellen gestartet: Projekt: BaseClasses, Konfiguration: Debug Win32 ------
1>  dllentry.cpp
1>  amextra.cpp

... hier kompilieren die BaseClasses schön vor sich hin ...

1>  vtrans.cpp
1>  winctrl.cpp
1>  winutil.cpp
1>  wxdebug.cpp
1>wxdebug.cpp(11): warning C4603: "_WINDLL": Das Makro ist nicht definiert, oder die Definition wurde nach Verwendung des vorkompilierten Headers geändert.
1>          Makro zu vorkompiliertem Header hinzufügen statt hier zu definieren
1>          "wxdebug.cpp(13)": Verwendung eines vorkompilierten Headers
1>  wxlist.cpp
1>  wxutil.cpp
1>  Code wird generiert...
1>  BaseClasses 2005.vcxproj -> C:\Users\Marco\Documents\Visual Studio 2010\Projects\TriBase_cd\TriBase\Include\DShowBaseClasses\.\Debug\BaseClasses.lib
1>          1 Datei(en) kopiert.
2>------ Neues Erstellen gestartet: Projekt: TriBase, Konfiguration: Debug Win32 ------
2>  tbButtonHandler.cpp
2>  tbColor.cpp
2>  tbConfig.cpp
2>  tbDirect3D.cpp

... hier kompiliert die TriBase schön vor sich hin ...

2>  tbVFile.cpp
2>  tbVideo.cpp
2>  TriBase.cpp
2>  Code wird generiert...
2>     Bibliothek ".\Debug/TriBaseD.lib" und Objekt ".\Debug/TriBaseD.exp" werden erstellt.
2>tbConfig.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__SendDlgItemMessageA@20" in Funktion ""enum tbResult __cdecl DeleteListData(struct HWND__ *,int)" (?DeleteListData@@YA?AW4tbResult@@PAUHWND__@@H@Z)".
2>tbConfig.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__EnableWindow@8" in Funktion ""enum tbResult __cdecl EnumDeviceTypes(struct HWND__ *)" (?EnumDeviceTypes@@YA?AW4tbResult@@PAUHWND__@@@Z)".
2>tbConfig.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__GetDlgItem@8" in Funktion ""enum tbResult __cdecl EnumDeviceTypes(struct HWND__ *)" (?EnumDeviceTypes@@YA?AW4tbResult@@PAUHWND__@@@Z)".
2>tbConfig.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__IsDlgButtonChecked@8" in Funktion ""enum tbResult __cdecl EnumBackBufferFormats(struct HWND__ *)" (?EnumBackBufferFormats@@YA?AW4tbResult@@PAUHWND__@@@Z)".
2>strmbased.lib(ctlutil.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "_GUID_NULL".
2>strmbased.lib(amvideo.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "_GUID_NULL".
2>tbConfig.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_GUID_NULL".
2>strmbased.lib(mtype.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "_GUID_NULL".
2>strmbased.lib(asyncrdr.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "_GUID_NULL".


... hier kommen noch etliche mehr ...

2>tbDirect3D.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__GetStockObject@4" in Funktion ""long __stdcall WindowProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WindowProc@@YGJPAUHWND__@@IIJ@Z)".
2>tbDirect3D.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__BeginPaint@8" in Funktion ""long __stdcall WindowProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WindowProc@@YGJPAUHWND__@@IIJ@Z)".
2>tbDirect3D.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__ShowCursor@4" in Funktion ""public: enum tbResult __thiscall tbDirect3D::Init(struct tbConfig *,char *,struct HWND__ *,struct HICON__ *)" (?Init@tbDirect3D@@QAE?AW4tbResult@@PAUtbConfig@@PADPAUHWND__@@PAUHICON__@@@Z)".
2>tbTextureManager.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_DXGetErrorString9A@4".
2>tbVertexBuffer.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_DXGetErrorString9A@4" in Funktion ""public: enum tbResult __thiscall tbVertexBuffer::Init(struct IDirect3DVertexBuffer9 *,unsigned long)" (?Init@tbVertexBuffer@@QAE?AW4tbResult@@PAUIDirect3DVertexBuffer9@@K@Z)".
2>tbVideo.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_DXGetErrorString9A@4".
2>tbMusic.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_DXGetErrorString9A@4".
2>tbOctree.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_DXGetErrorString9A@4".

... und noch mehr ...

2>tbDirect3D.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__LoadIconA@8" in Funktion ""public: enum tbResult __thiscall tbDirect3D::Init(struct tbConfig *,char *,struct HWND__ *,struct HICON__ *)" (?Init@tbDirect3D@@QAE?AW4tbResult@@PAUtbConfig@@PADPAUHWND__@@PAUHICON__@@@Z)".
2>tbDirect3D.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__UnregisterClassA@8" in Funktion ""public: enum tbResult __thiscall tbDirect3D::Exit(void)" (?Exit@tbDirect3D@@QAE?AW4tbResult@@XZ)".
2>tbDirectInput.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_c_dfDIKeyboard".
2>tbDirectInput.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_GUID_SysKeyboard".
2>tbDirectInput.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_c_dfDIMouse2".
2>tbDirectInput.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_GUID_SysMouse".

... noch mehr ...

2>LIBCMTD.lib(handler.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__EncodePointer@4".
2>LIBCMTD.lib(_libm_error_.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__EncodePointer@4".
2>LIBCMTD.lib(purevirt.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__EncodePointer@4".
2>LIBCMTD.lib(onexit.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__EncodePointer@4".
2>LIBCMTD.lib(cmiscdat.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__EncodePointer@4".
2>LIBCMTD.lib(invarg.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__EncodePointer@4".
2>LIBCMTD.lib(_trnsctrl_.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_RtlUnwind@16" in Funktion ""void __stdcall _UnwindNestedFrames(struct EHRegistrationNode *,struct EHExceptionRecord *)" (?_UnwindNestedFrames@@YGXPAUEHRegistrationNode@@PAUEHExceptionRecord@@@Z)".
2>LIBCMTD.lib(exsup4.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "_RtlUnwind@16".
2>LIBCMTD.lib(exsup.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "_RtlUnwind@16".
2>LIBCMTD.lib(_error_.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__IsDebuggerPresent@0" in Funktion ""void __cdecl failwithmessage(void *,int,int,char const *)" (?failwithmessage@@YAXPAXHHPBD@Z)".
2>LIBCMTD.lib(gs_report.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__IsDebuggerPresent@0".
2>LIBCMTD.lib(invarg.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__IsDebuggerPresent@0".
2>LIBCMTD.lib(_error_.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__RaiseException@16" in Funktion ""int __cdecl 

... (hier wurnden ganz viele Zeilen gelöscht, damit der Post überhaupt gespeichert wird) ...

2>LIBCMTD.lib(getqloc.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__IsValidLocale@8" in Funktion "___get_qualified_locale".
2>LIBCMTD.lib(getqloc.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__EnumSystemLocalesA@8" in Funktion "_GetLcidFromLangCountry".
2>LIBCMTD.lib(getqloc.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__GetUserDefaultLCID@0" in Funktion "_GetLcidFromDefault".
2>LIBCMTD.lib(a_cmp.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__CompareStringW@24" in Funktion ""int __cdecl __crtCompareStringA_stat(struct localeinfo_struct *,unsigned long,unsigned long,char const *,int,char const *,int,int)" (?__crtCompareStringA_stat@@YAHPAUlocaleinfo_struct@@KKPBDH1HH@Z)".
2>LIBCMTD.lib(setenv.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__SetEnvironmentVariableA@8" in Funktion "___crtsetenv".
2>Debug/TriBase.dll : fatal error LNK1120: 208 nicht aufgelöste externe Verweise.
========== Alles neu erstellen: 1 erfolgreich, Fehler bei 1, 0 übersprungen ==========


Insgesamt hatte der Compile-Output ca 600 Zeilen.
Eigentlich alles nicht aufgelöste externe Symbole.

Weiß jemand Rat?

5

07.10.2010, 18:05

Naja, sicher dass das wirklich alles eingetragen ist, und du auch diese Konfiguration kompilierst? Weil eigentlich müsste der die in user32.lib größtenteils finden.

6

08.10.2010, 01:40

Soooo, nach einigem Probieren, habe ich es nun auch endlich geschafft die TriBase zu compilieren.

Das Beispiel 2 funktioniert auch. (Nur mal so als Test)
Danke an alle die sich das hier durchgelesen haben und versucht haben das nachzuvollziehen.
Besonders an E122, der mich mit einer Gegenfrage auf die richtige Spur geschubst hat :thumbup:

Gruß,
Sleepwalker

7

01.11.2010, 21:35

Hey,

es wäre doch schön, wenn du die Lösung, die du gefunden hast, noch hier mitteilst - so kann anderen mit ähnlichen Problemen direkt weitergeholfen werden.
Ich habe mal, nachdem ich die TriBaseEngine unter Windows 7 mit Visual Studio 2010 aufgesetzt habe, die einzelnen Schritte aufgeschrieben. Viele Informationen stammen hier aus dem Forum, es ist also mehr eine Sammlung der Lösungen aus dem Forum für Windows 7 / VS 2010

Anleitung für die Einrichtung der TriBase – Engine in Kombination mit Visual Studio 2010
Getestet unter Windows 7 64 bit & 32 bit

Visual Studio am besten als Administrator ausführen. Dazu Rechtsklick auf den Shortcut → als Administrator ausführen (nicht möglich/nötig unter XP). ACHTUNG: auf diese Weise werden die erstellten DLLs automatisch nach Windows\System32 kopiert (auf eigene Gefahr).

Windows SDK sowie DirectX SDK installieren (runterladen – neueste Version – nicht von der CD aus dem Buch! (zumindest nicht getestet)).

Die Ordner „TriBase“ und „Beispiele“ von der CD aus dem Buch auf die Festplatte kopieren.

TriBase braucht die richtigen Libs (StrmBase.lib), diese „BaseClasses“ müssen allerdings erst kompiliert werden, da veraltet.
  • Dazu das Projekt (TriBase-Verzeichnis)\Include\Debug\BaseClasses.vcproj öffnen und konvertieren (passiert automatisch durch den Dialog).
  • Als nächstes die 3 *.h (include-) und *.lib (Bibiliotheks-) Verzeichnisse vom DirectX SDK, Windows SDK und der TriBase hinzufügen:
[list=1] Wie im Buch beschrieben. Achtung: 32bit Versionen benutzen (x86)!
Include-Verzeichnisse:
(TriBase-Verzeichnis)\Include
(DirectX-SDK-Verzeichnis)\Include\
(Windows-SDK-Verzeichnis)\Include\
Lib-Verzeichnisse:
(TriBase-Verzeichnis)\Lib
(DirectX-SDK-Verzeichnis)\Lib\x86
(Windows-SDK-Verzeichnis)\Libdas richtige Windows-SDK-Verzeichnis ist bei Windows 7 64bit im Standardfall unter „C:\Program Files (x86)\Microsoft SDK\...“
Dazu, damit man nicht jedes Mal die Verzeichnisse neu angeben muss, dieses Tutorial befolgen: http://blog.kalmbach-software.de/de/2010…fad-in-vc-2010/
[/list]
  • Die verlinkten Verzeichnisse werden bei jedem TriBase-basierten Programm benötigt. Anschließend jeweils einmal kompilieren – im Debug- sowie Releasemodus. Zum Entwickeln wird der Debugmodus benutzt.
[list=1] Wahrscheinlich schmeißt Visual Studio hier einen Fehler beim Copybefehl, die Dateinamen sind noch nicht richtig gesetzt. In diesem Fall werden wir sie hardcoden:
[/list] Rechtsklick auf das Projekt → Eigenschaften → Konfigutationseigenschaften → Allgemein → Zielname: „StrmBase“ bei ReleaseVersion und „StrmBaseD“ bei DebugVersion.
Unter Konfigutationseigenschaften → Bibliothekar → Allgemein sollte die Ausgabedatei entsprechend „Release\StrmBase.lib“ bei der ReleaseVersion und „Debug\StrmBaseD.lib“ bei der DebugVersion sein.
  • Nun kompilieren mit Rechtsklick auf BaseClasses → Neu Erstellen.


Die eigentliche TriBase.dll wird jetzt erstellt. Dazu die Datei TriBase 2005.vcproj in „TriBase“ mit Visual Studio 2010 öffnen.
  • Rechtsklick auf das Projekt → Eigenschaften → Konfigurationseigenschaften → Linker → Eingabe → Zusätzliche Eigenschaften: Hier muss „dxerr9.lib“ in „dxerr.lib“ geändert werden.
  • Bei Konfigurationseigenschaften → Allgemein → Zielname „TriBase“ für die ReleaseVersion und „TriBaseD“ für die DebugVersion angeben. Unter Konfigurationseigenschaften → Bibliothekar → Allgemein sollte die Ausgabedatei entsprechend „Release\TriBase.lib“ bei der ReleaseVersion und „Debug\TriBaseD.lib“ bei der DebugVersion sein.
  • TriBase.h öffnen:
DXErr9.h“ zu „DXErr.h“ ändern
#define DXGetErrorString9 DXGetErrorString“ und
„#define DXGetErrorDescription9 DXGetErrorDescription“ hinzufügen
  • Resource.rc öffen:
den „#include "mfc/afxres.h"“ Befehl in „#include “ umändern und das Makro „#define IDC_STATIC -1“ hinzufügen.
  • Rechtsklick auf TriBase → Neu Erstellen!
  • Die entstandene Debug\TriBaseD.dll (Bei DebugVersion) muss entweder in den Ordner Windows\System32 kopiert werden oder in den Ordner des Beispieles, das man grade ausführen will.


Fast geschafft! Jetzt kann man schon eines der Beispiele laden (zugehörige vcproj-Datei öffnen)
Folgende Prozedur muss für jedes Beispiel wiederholt werden:
  • (wie oben) Rechtsklick auf das Projekt → Eigenschaften → Konfigutationseigenschaften → Linker → Eingabe → Zusätzliche Eigenschaften: Hier muss „dxerr9.lib“ in „dxerr.lib“ geändert werden.
  • Resource-Datei des Projektes öffnen:
    (wie oben) den „#include "mfc/afxres.h"“ Befehl in „#include “ umändern und das Makro „#define IDC_STATIC -1“ hinzufügen.
  • Bei Beispielen bei Projekt → Eigenschaften → Konfigutationseigenschaften → Linker →Allgemein → Ausgabedatei statt eines statischen Dateinamens „$(TargetFileName)“ angeben.
  • (Beispiel-Verzeichnis)\Allgemeines\Allgemeines.rc öffnen:
    (wie oben) den „#include "mfc/afxres.h"“ Befehl in „#include “ umändern und das Makro „#define IDC_STATIC -1“ hinzufügen.


Nun sollten die meisten Beispiele ohne Fehler im DebugModus kompilierbar sein!

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »max_one« (04.11.2010, 23:02)


8

04.11.2010, 19:34

Hallo,

Deine Anleitung ist super, das ist genau das, was ich schon länger suche!

Aber ich komme nicht ganz mit:

Die verlinkten Verzeichnisse werden bei jedem TriBase-basierten Programm benötigt. Anschließend jeweils einmal kompilieren – im Debug- sowie Releasemodus. Zum Entwickeln wird der Debugmodus benutzt. [list=1] Wahrscheinlich schmeißt Visual Studio hier einen Fehler beim Copybefehl, die Dateinamen sind noch nicht richtig gesetzt. In diesem Fall werden wir sie hardcoden:
[/list] Rechtsklick auf das Projekt → Eigenschaften → Konfigutationseigenschaften → Allgemein → Zielname: „StrmBase“ bei ReleaseVersion und „StrmBaseD“ bei DebugVersion.
Unter Konfigutationseigenschaften → Bibliothekar → Allgemein sollte die Ausgabedatei entsprechend „Release\StrmBase.lib“ bei der ReleaseVersion und „Debug\StrmBaseD.lib“ bei der DebugVersion sein.
Nun kompilieren mit Rechtsklick auf BaseClasses → Neu Erstellen.

Die eigentliche TriBase.dll wird jetzt erstellt. Dazu die Datei TriBase 2005.vcproj in „TriBase“ mit Visual Studio 2010 öffnen.
Rechtsklick auf das Projekt → Eigenschaften → Konfigutationseigenschaften → Linker → Eingabe → Zusätzliche Eigenschaften: Hier muss „dxerr9.lib“ in „dxerr.lib“ geändert werden. Bei Konfigurationseigenschaften → Allgemein → Zielname „TriBase“ für die ReleaseVersion und „TriBaseD“ für die DebugVersion angeben. Unter Konfigurationseigenschaften → Bibliothekar → Allgemein sollte die Ausgabedatei entsprechend „Release\TriBase.lib“ bei der ReleaseVersion und „Debug\TriBaseD.lib“ bei der DebugVersion sein.
Wozu 2mal kompilieren?

Wenn ich danach Projekt → Eigenschaften → Konfigutationseigenschaften →Allgemein gehe, gibt es dort kein "Zielname".
Das gleiche nachher beim Erstellen der TriBase.dll

Gruß, Kirtash

BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

9

04.11.2010, 21:53

Es gibt 2 Modi: Den Release- und den Debug-Modus. Du musst dein Projekt für jeden Modus einmal kompilieren. Im Debug-Modus wird die TriBaseD.dll erzeugt, die viele zusätzlichen Informationen enthält, mit denen man ein Programm besser debuggen kann. Im Release-Modus wird die TriBase.dll erzeugt, die kleiner und schneller, jedoch zum debuggen nicht gut ist.

Die Modi können in der Projektkonfiguration festgelegt werden.

10

05.11.2010, 16:56

So,
Den ersten Teil habe ich jetzt fehlerlos geschafft, dank eurer Hilfe!

Doch finde ich ich bei dem TriBaseprojekt
Unter Konfigurationseigenschaften → Bibliothekar → Allgemein sollte die Ausgabedatei entsprechend „Release\TriBase.lib“ bei der ReleaseVersion und „Debug\TriBaseD.lib“ bei der DebugVersion sein.

"Bibliothekar" nicht. Bei BaseClasses war es noch da :S
Außerdem kann ich diesen Abschnitt nicht abarbeiten:

Resource.rc öffen:
den „#include "mfc/afxres.h"“ Befehl in „#include “ umändern und das Makro „#define IDC_STATIC -1“ hinzufügen.

Resource.rc ist bei mir ein Ordner mit mehreren Unterordnern, in keinem von diesen befindet sich eine Datei, wo ich das ändern könnte.

Und wenn ich es so kompiliere, klappt es zwar im Debug-Modus, nicht jedoch im Release-Modus.
Fehlermeldung:
1> TriBase.cpp
1> Bibliothek ".\Release/TriBase.lib" und Objekt ".\Release/TriBase.exp" werden erstellt.
1>tbDirect3D.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_DXGetErrorStringA@4".
1>tbDirect3D.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_DXGetErrorDescriptionA@4".
1>.\Release/TriBase.dll : fatal error LNK1120: 2 nicht aufgelöste externe Verweise.
========== Alles neu erstellen: 0 erfolgreich, Fehler bei 1, 0 übersprungen ==========

Ich habe jedoch DXGetErrorString9 und DXGetErrorDescription9 wie oben beschrieben nach TriBase.h geschrieben.

Gruß, Kirtash

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Kirtash« (05.11.2010, 18:11)


Werbeanzeige