Zum Inhalt springen

Linkerfehler: Nichtaufgeloestes externes Symbol (war: Error)


Empfohlene Beiträge

Geschrieben

Hi,

ich gehe mal davon aus das die Funktion in der Headerdatei deklariert ist und sich

die Definition in einer DLL Datei befindet. Wenn das so ist, dann bedeutet der

Fehler das der Linker die Funktion in den Angegebenen .Lib Dateien nicht finden

kann. Du mußt also einfach dem Linker noch die entsprechende Lib Datei

angeben.

EDIT: Die Boardsuche hätte dir übrigens auch geholfen;)

Gruß

Guybrush

Geschrieben
Originally posted by Guybrush Threepwood

Hi,

ich gehe mal davon aus das die Funktion in der Headerdatei deklariert ist und sich

die Definition in einer DLL Datei befindet. Wenn das so ist, dann bedeutet der

Fehler das der Linker die Funktion in den Angegebenen .Lib Dateien nicht finden

kann. Du mußt also einfach dem Linker noch die entsprechende Lib Datei

angeben.

Gruß

Guybrush

Ne eigentlich ist es so, dass die Funktion sich in eine exe befindet und rufen will ich sie in eine DLL

Geschrieben
Originally posted by 007ski

Ne eigentlich ist es so, dass die Funktion sich in eine exe befindet und rufen will ich sie in eine DLL

Das funktioniert so nicht, weil der Linker nicht weiß, wo in der Exe-Datei der Einsprungpunkt für diese Klasse/Funktion ist. Das lässt sich auch nicht zur Laufzeit auflösen. Das geht nur bei Aufrufen von EXE nach DLL.

Außerdem ist es schlechtes Design, eine DLL von einer EXE abhängig zu machen. Das widerspricht ja der Absicht, die hinter DLLs steht.

Du könntest aber in der DLL eine Funktion exportieren, mit der du einen Zeiger auf eine CNameApp-Instanz oder einen Funktionszeiger angeben kannst.

Geschrieben
Originally posted by Klotzkopp

Du könntest aber in der DLL eine Funktion exportieren, mit der du einen Zeiger auf eine CNameApp-Instanz oder einen Funktionszeiger angeben kannst.

Sorry aber es überschreibt meine Möglichkeiten, kannst Du bitte mit es mit code zeigen ;()

PS

Die DLL rufe ich aber dynamisch in exe auf

Geschrieben

Also, das mit einem Instanzzeiger geht nicht, weiß auch nicht, wie ich darauf gekommen bin. Aber mit einem Funktionszeiger gehts:

In der EXE:

void do_init_benutzer()

{

CNameApp name

name.init_benutzer();

}

// irgendwo am Anfang:

// der DLL den Funktionszeiger übergeben.

set_do_init_benutzer( do_init_benutzer );

In der DLL:

// Funktionszeiger

void(*fp_init_benutzer)(void);

// exportierte Funktion zum Setzen des Funktionszeigers

void __declspec(dllexport) set_do_init_benutzer_fp( void(*fp)(void) )

{

fp_init_benutzer = fp;

}

Dann kannst du in der DLL mit

fp_init_benutzer();

die Funktion in der EXE aufrufen.

Geschrieben
Originally posted by 007ski

ja richtig

Mal abgesehen davon das es offentsichtlich nicht ohne weiteres Möglich ist, ist das

meiner Meinung nach absolut unsaubere Programmierung.

Wenn die DLL auf Variablen in deiner Exe zugreifen soll, dann übergib sie doch

einfach als Parameter an die DLL. Funktionen in deiner Exe solltest du eh nur in

deiner Exe aufrufen.

Gruß

Guybrush

Geschrieben
Originally posted by Guybrush Threepwood

Mal abgesehen davon das es offentsichtlich nicht ohne weiteres Möglich ist, ist das

meiner Meinung nach absolut unsaubere Programmierung.

ja richtig ;)

Originally posted by Guybrush Threepwood

Wenn die DLL auf Variablen in deiner Exe zugreifen soll, dann übergib sie doch

einfach als Parameter an die DLL. Funktionen in deiner Exe solltest du eh nur in

deiner Exe aufrufen

Sorry aber wie kann ich ein Parameter in meinem fall Cstring an die DLL übergeben

Geschrieben

Ich habe eine Funktion in DLL

void xyDlg::getstr(CString &str)

{

}

dann rufe ich in exe mit

AfxLoadLibrary() die DLL

Und mit GetProcAddress die Funktion und dann .....

Irgend wie fehlt mir Idee bitttttte um Hilfe !?!?!?

Geschrieben
Originally posted by 007ski

Ich habe eine Funktion in DLL

void xyDlg::getstr(CString &str)

{

}

dann rufe ich in exe mit

AfxLoadLibrary() die DLL

Und mit GetProcAddress die Funktion und dann .....

Du kannst nichtstatische Member nur aufrufen, wenn Du in der Exe eine Instanz von xyDlg (oder einen Zeiger darauf) hast.
Geschrieben
Originally posted by Klotzkopp

Du kannst nichtstatische Member nur aufrufen, wenn Du in der Exe eine Instanz von xyDlg (oder einen Zeiger darauf) hast.

Also dass was Guybrush Threepwood gesagt hat stimmt nicht ?

Geschrieben
Originally posted by 007ski

Also dass was Guybrush Threepwood gesagt hat stimmt nicht ?

Auf welche Aussage von Guybrush Threepwood beziehst du das? Soweit ich das sehe, hat er nichts falsches gesagt.

Exportierst du denn überhaupt die Klasse xyDlg oder die Methode getstr?

Wo wird die Instanz von xyDlg erzeugt?

Geschrieben
Originally posted by Guybrush Threepwood

Doch:D, im allgemeinen schon. Nur das was du da versuchst ginge nur

wenn du in deiner EXE das Objekt von deiner xyDLG Klasse erstellen würdest,

oder du eben einen Zeiger darauf hättest.

ok jetzt passt

Danke Klotzkopp und Guybrush Threepwood

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...