Hallo,
ich entwickle gerade an einer DLL, die sowohl unter Windows XP (VC++
2008) als auch Windows CE (EVC++ 4.0) möglichst ohne Codeänderungen
verwendet werden kann. Soweit klappt das auch, nur eine Kleinigkeit
gefällt mir noch nicht:
Da die DLL dynamisch eingebunden werden soll, muss das aufrufende
Programm sich zuerst die Adressen der einzelnen Funktionen aus der Dll
holen. Dazu verwende ich "GetProcAddress", welches einen String
erwartet, der den Funktionsnamen enthält (den ich aus der Dll extrahiert
habe). Hier zwei beispielhafte Aufrufe:
Prozessadresse holen (Windows CE):
1 | OpenChannel = (int (*)(LPCSTR, UINT8, UINT8, UINT32))GetProcAddress(dllHandle,TEXT("?OpenChannel@@YAHPBDEEI@Z"));
|
Prozessadresse holen (Windows XP):
1 | OpenChannel = (int (*)(LPCSTR, UINT8, UINT8, UINT32))GetProcAddress(dllHandle,"?OpenChannel@@YGHPBDEEI@Z");
|
Soweit ich es verstanden habe, dienen die Zeichen nach dem "@" zur
Kodierung der formalen Parameter der funktion, so dass auch überladene
Funktionen richtig identifiziert werden können, richtig? In meinem Fall
allerdings unterschieden sich diese Zeichen geringfügig:
CE: ?OpenChannel@@YAHPBDEEI@Z
XP: ?OpenChannel@@YGHPBDEEI@Z
Da die Funktionen die gleichen Parameter verwenden, wundert mich dieser
Unterschied, und erschwert die Verwendung der verschiedenen Versionen.
Meine Fragen:
- Warum unterscheidet sich die "Signatur" der Funktionen hier?
- Kann ich dies irgendwie beeinflussen?
- Oder ist es alternativ möglich, bei Funktionen die in der Dll nicht
überladen sind, den "@-Teil" wegzubekommen?
Vielleicht kann mir da ja jemand auf die Sprünge helfen.
Peter