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

Fred

Supermoderator

  • »Fred« ist der Autor dieses Themas

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

1

01.05.2006, 00:17

Fehler bei der Compilerung des Beispiels "Fenster"

Also bei mir ist bei der Kompilerung des Beispiels aus Kapitel 2 "Fenster" folgender Fehler aufgetreten:

c:\programierung\spieleprogrammierung\engine\tribase\include\tbgui.h(159) : error C2065: 'strcpy_instead_use_StringCbCopyA_or_StringCchCopyA' : nichtdeklarierter Bezeichner

Was stimmt in meinem Code nicht ???

2

01.05.2006, 01:37

Soweit ich das sehe benutzt du eine Variable die nicht deklariert ist. Und zwar eine sehr grosse ;)
der name der Variable: "strcpy_instead_use_StringCbCopyA_or_StringCchCopyA" schau einfach mal im Quelltext ob du dich nicht verschrieben hast

mfg
hebi

Sheddex

unregistriert

3

01.05.2006, 01:46

Und danach solltest du vielleicht den Namen des Threads ändern, damit man auch weiß um was es geht ;)

-> Ist ja geschehen ;)

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

4

01.05.2006, 11:24

Oh mann liest hier niemand den Fehler?
"strcpy_instead_use_StringCbCopyA_or_StringCchCopyA"

Das heißt du benutzt strcpy, obwohl es unsicher ist. (Die Funktion ist wirklich unsicher)

Probier mal strncpy (allerdings hat die auch paar Bugs), strcpy_s wenn du Express benutzt, such nach einem Makro, der die Warnung ausschaltet oder schreib dir dein eigenes.

Ciao

Fred

Supermoderator

  • »Fred« ist der Autor dieses Themas

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

5

01.05.2006, 11:36

Gut er liefert nicht mehr diese Fehlermeldung. im COde heißt die Zeile jetzt:

Quellcode

1
void    SetText(char* pcText)   {strncpy(m_acText, pcText);}

Das Problem: stncpy() darf keine zwei Parameter haben.(Sondern 3, size_t).

Ach ja wo soll ich so ein Makro suchen???

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

6

01.05.2006, 13:41

Warnungen schaltet man nicht aus, sondern beseitigt sie.

stncpy braucht natürlich drei Argumente (siehe http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wceappdev5/html/wce50lrfstrncpycmawcsncpy.asp)

Wenn deine Buffer beide 32 Byte groß sind, musst du 32 bei Size t eintragen, so wird ein Buffer Overflow verhindert.

Fred

Supermoderator

  • »Fred« ist der Autor dieses Themas

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

7

01.05.2006, 18:29

OK So weit so gut bis ich habe jetzt alles geändert, doch ich muss im Linker etwas flasch gemacht haben, denn dann kommt der Linkervorgang und der spukt folgedes aus:

Quellcode

1
2
3
4
5
6
Fenster.obj : error LNK2001: Nichtaufgeloestes externes Symbol "__declspec(dllimport) enum tbResult __cdecl tbExit(void)" (__imp_?tbExit@@YA?AW4tbResult@@XZ)
Fenster.obj : error LNK2001: Nichtaufgeloestes externes Symbol "enum tbResult __cdecl ExitWindow(void)" (?ExitWindow@@YA?AW4tbResult@@XZ)
Fenster.obj : error LNK2001: Nichtaufgeloestes externes Symbol "__declspec(dllimport) enum tbResult __cdecl tbDoMessageLoop(enum tbResult (__cdecl*)(float),enum tbResult (__cdecl*)(float))" (__imp_?tbDoMessageLoop@@YA?AW4tbResult@@P6A?AW41@M@Z0@Z)
Fenster.obj : error LNK2001: Nichtaufgeloestes externes Symbol "enum tbResult __cdecl InitWindow(int,int,char *,struct HICON__ *)" (?InitWindow@@YA?AW4tbResult@@HHPADPAUHICON__@@@Z)
Fenster.obj : error LNK2001: Nichtaufgeloestes externes Symbol "__declspec(dllimport) enum tbResult __cdecl tbInit(void)" (__imp_?tbInit@@YA?AW4tbResult@@XZ)
Debug/Standard.exe : fatal error LNK1120: 5 unaufgeloeste externe Verweise

???

Fred

Supermoderator

  • »Fred« ist der Autor dieses Themas

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

8

01.05.2006, 18:40

Ich hab noch mal was im Linker des Projekts geändert und jetzt nur noch drei Fehler:

Quellcode

1
2
3
Fenster.obj : error LNK2001: Nichtaufgeloestes externes Symbol "enum tbResult __cdecl ExitWindow(void)" (?ExitWindow@@YA?AW4tbResult@@XZ)
Fenster.obj : error LNK2001: Nichtaufgeloestes externes Symbol "enum tbResult __cdecl InitWindow(int,int,char *,struct HICON__ *)" (?InitWindow@@YA?AW4tbResult@@HHPADPAUHICON__@@@Z)
Debug/Standard.exe : fatal error LNK1120: 2 unaufgeloeste externe Verweise

Fred

Supermoderator

  • »Fred« ist der Autor dieses Themas

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

9

02.05.2006, 19:31

Nochmal rumprobiert: Allgemeines-Dateien eingefügt Linkerfehler:

Quellcode

1
2
3
4
5
InitDirect3D.obj : error LNK2001: Nichtaufgeloestes externes Symbol _DXGetErrorString9A@4
InitDirect3D.obj : error LNK2001: Nichtaufgeloestes externes Symbol _DXGetErrorDescription9A@4
InitDirect3D.obj : error LNK2001: Nichtaufgeloestes externes Symbol _Direct3DCreate9@4
Direct3DEnum.obj : error LNK2001: Nichtaufgeloestes externes Symbol _Direct3DCreate9@4
Debug/Standard.exe : fatal error LNK1120: 3 unaufgeloeste externe Verweise

Fred

Supermoderator

  • »Fred« ist der Autor dieses Themas

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

10

02.05.2006, 20:14

So und nun habe ich alle Allgemeines Dateien per include eingefügt:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
#include <windows.h>
#include <TriBase.h>
#include "C:\\Programierung\\Spieleprogrammierung\\Engine\\Beispiele\\Allgemeines\\Initwindow.h"
#include "C:\\Programierung\\Spieleprogrammierung\\Engine\\Beispiele\\Allgemeines\\Allgemeines.h"
#include "C:\\Programierung\\Spieleprogrammierung\\Engine\\Beispiele\\Allgemeines\\Direct3DEnum.cpp"
#include "C:\\Programierung\\Spieleprogrammierung\\Engine\\Beispiele\\Allgemeines\\InitDirect3D.cpp"
#include "C:\\Programierung\\Spieleprogrammierung\\Engine\\Beispiele\\Allgemeines\\Initwindow.cpp"
#include "Resourcen.h"//Resoucen vgl. mit rescource.h

Doch nun kommt er nicht zum linken, da er einen Fehler hat

Quellcode

1
c:\\programierung\\spieleprogrammierung\\engine\\beispiele\\allgemeines\\direct3denum.h(19) : error C2011: 'SDirect3DParameters' : 'struct'-Typ-Neudefinition

So wie ich das sehe wird die Datei Direct3Denum.h zwei mal aufgerufen Und zwar von der Datei Init Dirct3d.cpp und Direct3denum.cpp.
Das ist die Ursache. Doch wie beseitige ich den Fehler.
Wenn ich eine der Dateien lösche erhalte ich ca. 20 Linker fehler
??? ??? ???

Werbeanzeige