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

12.04.2017, 21:24

[Gelöst] Probleme mit den ReadINI Funktionen

Hallo,
ich habe noch einmal Probleme mit den ReadINI - Funktionen

Ich Rufe die Funktionen so auf:

C-/C++-Quelltext

1
2
3
4
5
    // Struktur füllen
    Bridge.vLeftBack = tbReadINIVector3(&cBridgeName, "LeftBack", "Data\\INI\\Bridge.ini");
    Bridge.vRightBack = tbReadINIVector3(&cBridgeName, "RightBack", "Data\\INI\\Bridge.ini");
    Bridge.vLeftFront = tbReadINIVector3(&cBridgeName, "LeftFront", "Data\\INI\\Bridge.ini");
    Bridge.vRightFront = tbReadINIVector3(&cBridgeName, "RightFront", "Data\\INI\\Bridge.ini");


Und so schaut die Funktionen "tbReadINIVector3" aus:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Liest einen tbVector3-Wert aus der INI-Datei
tbVector3 tbReadINIVector3(char* pcSection,
    char* pcKey,
    LPCSTR cFile)
{
    char        acString[256];
    tbVector3   vValue;


    // String lesen
    tbReadINIString(pcSection, pcKey, acString, 256, cFile);
    if (!strcmp(acString, "[NOT FOUND]")) return tbVector3(0.0f, 0.0f, 0.0f);

    // Die Vektorkomponenten extrahieren
    sscanf(acString, "%f, %f, %f", &vValue.x, &vValue.y, &vValue.z);

    return vValue;
}


Wenn ich das jetzt aber mache, bekomme ich einen Linker - Fehler:

Fehler LNK2019 Verweis auf nicht aufgelöstes externes Symbol ""int __cdecl tbReadINIInt(char *,char *,char const *)" (?tbReadINIInt@@YAHPAD0PBD@Z)" in Funktion ""float __cdecl GetZAxis(float,float)" (?GetZAxis@@YAMMM@Z)"

Ich habe in der Datei, in der ich die Funktionen aufrufe, habe ich "TriBase.h" inkludiert und in dieser ist die Datei für die tbReadINI Funktionen inkludiert.

Ich hoffe mir kann jemand helfen
Grüße Patrick
Albert Einstein sagte: "2 Stunden mit einem netten Mädchen fühlen sich an wie 20 Minuten, 20 Minuten auf einem heißen Ofen fühlen sich an wie 2 Stunden. - Das ist Relativität"

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Patrick Z.« (14.04.2017, 12:19)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

13.04.2017, 13:10

Nun, irgendwo steht in einem Header eine "tbReadINIInt" Funktion mit 3 Parametern, die auch in GetZAxis aufgerufen wird, aber es gibt scheinbar keine dem Compiler bekannte cpp Datei, wo die Funktion definiert wird.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

3

13.04.2017, 15:02

Sie ist ihm aber bekannt, weil andere Funktionen aus dieser Datei funktionieren.

Edit:
Ich habs jetzt nochmal probiert mit einer anderen Funktion aus der Datei, es funktioniert doch nicht, aber ich weiß nicht, warum dem Compiler die Datei nicht bekannt ist.
Albert Einstein sagte: "2 Stunden mit einem netten Mädchen fühlen sich an wie 20 Minuten, 20 Minuten auf einem heißen Ofen fühlen sich an wie 2 Stunden. - Das ist Relativität"

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Patrick Z.« (13.04.2017, 15:22)


4

13.04.2017, 15:34

Ich habe in meiner Datei mit der Funktion GetZAxis #include <TriBase.h> stehen. In der Datei TriBase.h steht #include "tbReadINI.h". Und in der Datei tbReadINI.h steht:

C-/C++-Quelltext

1
tbVector3 tbReadINIVector3(char* pcSection, char* pcKey, LPCSTR cFile);
In der Datei tbReadINI.cpp steht #include <TriBase.h> und die Funktion:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Liest einen tbVector3-Wert aus der INI-Datei
tbVector3 tbReadINIVector3(char* pcSection,
    char* pcKey,
    LPCSTR cFile)
{
    char        acString[256];
    tbVector3   vValue;


    // String lesen
    tbReadINIString(pcSection, pcKey, acString, 256, cFile);
    if (!strcmp(acString, "[NOT FOUND]")) return tbVector3(0.0f, 0.0f, 0.0f);

    // Die Vektorkomponenten extrahieren
    sscanf(acString, "%f, %f, %f", &vValue.x, &vValue.y, &vValue.z);

    return vValue;
}


Ich verstehe nicht, warum der Compiler die Funktion nicht kennt.
Albert Einstein sagte: "2 Stunden mit einem netten Mädchen fühlen sich an wie 20 Minuten, 20 Minuten auf einem heißen Ofen fühlen sich an wie 2 Stunden. - Das ist Relativität"

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

13.04.2017, 15:45

Und diese .cpp-Datei ist auch im Visual C++-Projekt mit drin und wird kompiliert?

6

13.04.2017, 15:46

Ich habe die Funktion tbReadINIVector3 in die Datei TriBase.cpp und TriBase.h verschoben (diese beiden Dateien kennt er auf jeden Fall), aber ich bekomme trotzdem den gleichen Fehler. Das heißt es liegt nicht daran, dass der Compiler die Datei nicht kennt.
Albert Einstein sagte: "2 Stunden mit einem netten Mädchen fühlen sich an wie 20 Minuten, 20 Minuten auf einem heißen Ofen fühlen sich an wie 2 Stunden. - Das ist Relativität"

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

7

13.04.2017, 21:23

Hast du die TriBase-Engine denn danach auch neu kompiliert und benutzt in deinem Projekt die daraus entstandene .lib- und .dll-Datei? Das musst du natürlich tun!

8

13.04.2017, 21:51

Ja natürlich, es hat bis jetzt jeder Veränderung funktioniert.
Albert Einstein sagte: "2 Stunden mit einem netten Mädchen fühlen sich an wie 20 Minuten, 20 Minuten auf einem heißen Ofen fühlen sich an wie 2 Stunden. - Das ist Relativität"

9

13.04.2017, 22:01

Außerdem sagt mir die Hilfe für diesen Fehler, dass es ganz ganz viele Gründe geben könnte. Unter den Umständen, habe ich herausgefunden, dass es zu folgender Beschreibung passt:

Zitat


The calling convention is different between the function declaration and the function definition. Calling conventions (__cdecl, __stdcall, __fastcall, or __vectorcall) are encoded as part of the decorated name. Verify that the calling convention is the same.


Jedoch finde ich keinen Unterschied zwischen dem Aufruf und der Deklaration bzw. der Definition. (Ich hoffe ich habe die Beschreibung richtig gelesen)

Grüße Patrick
Albert Einstein sagte: "2 Stunden mit einem netten Mädchen fühlen sich an wie 20 Minuten, 20 Minuten auf einem heißen Ofen fühlen sich an wie 2 Stunden. - Das ist Relativität"

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

10

13.04.2017, 23:11

Wahrscheinlich hast du in der Header-Datei TRIBASE_API (oder so ähnlich? guck mal, was bei allen anderen TriBase-Funktionen/-Klassen davor steht) vergessen vor die Funktion zu schreiben. Wenn du das vergessen hast, dann wird die Funktion nämlich nicht exportiert, und dann ist es auch klar, dass der Compiler sie nicht findet.

Werbeanzeige