Bei Funktionen wird bei unresolved simbolen ein Fehler gemeldet
-
Hab mal eine kleine Frage.
Und zwar interessiert mich folgendes, und ich würd gern wissen wie diese Fehlermeldung zustande kommt!Wenn ich in Projekt eine DLL einbinde, und die Lib rausschmeise, dann kommt logischer weise ein Fehler. Nur weis ich nicht wie der compiler auf eine Zahl kommt. Er meldet dann zum Beispiel "Der Funktionsaufruf hieß zum Beispiel void func(void) und die Fehlermeldung lautet
"unresolved externe Symbole func@16"
Warum meldet er dieses @16.
Das ist mein Problem, kann mir das nicht erklären.
thx
-
Ich würde mal auf einen C++ Compiler tippen - der muß überladenen Funktionen jeweils eindeutige Bezeichner geben und hängt deshalb Informationen über die Signatur mit in den Namen (wonach er da geht, ist nicht vorgeschrieben).
-
wegeditiert wegen vertan
-
Ich poste heut nachmittag mal ein Codesequment, welches ein Fehler hat zwecks angeblich überladenen Funktionen. Ich weis nur net warum. Vielleicht kannst du mir ja helfen.
grüße
-
Ich hab noch mal nachgesehen, mein erster Gedanke war wohl doch richtig. Das @Zahl bedeutet die Gesamtgröße der Funktionsargumente in Bytes. [1]
tt
[1] Programming Applications for Windows, Chap. 19 Building the DLL Module
-
TheTester schrieb:
Ich hab noch mal nachgesehen, mein erster Gedanke war wohl doch richtig. Das @Zahl bedeutet die Gesamtgröße der Funktionsargumente in Bytes. [1]
Welchen Compiler betrifft das denn? Diese Namenserweiterungen sind offiziell nicht standardisiert, also kann jeder Compiler sein eigenes Süppchen kochen.
(und 16 Byte für null Parameter (void) kann auch nicht so ganz hinkommen ;))
-
Lccwin32 und MS wenn ich mich recht entsinne. Ich glaub das bekommt man so auch raus wenn man mit PEdump eine Dll ausliest, müsste bei den Exports sein.
-
TheTester schrieb:
Ich hab noch mal nachgesehen, mein erster Gedanke war wohl doch richtig. Das @Zahl bedeutet die Gesamtgröße der Funktionsargumente in Bytes. [1]
richtig, exportnamen von funktionen, die mit der calling convention 'stdcall' aufgerufen werden, bekommen unter windows einen underscore _ davor und ein @x hinten angehängt, wobei x die anzahl der bytes angibt, die der aufrufer auf den stack pushen muss. eine funktion void func(void) hätte demnach den exportnamen _func@0.
mal abgesehen von der @16, vielleicht ist dein problem, dass du die funktion als 'cdecl' versuchst aufzurufen?
-
hier das kleine Code Fragment.
DLLROUTINE mobyErr_t DLLDECL moby_stop(mobyHandle_t handle); //mobyHandle_t und mobyErr_t sind Strukturen.