Eine DLL, Unicode Multibyte
lima-city → Forum → Programmiersprachen → C/C++ und D
arbeiten
behandeln
code
doppelt schreiben
entsprechend funktion
erstellen
exportierten funktionen
frage
funktion
gleichen namen
internen interne header
modul
paste
tun
typ
unterscheiden
unterschiedliche namen
url
version
verweis
-
Hallo,
ich möchte eine Dll mit ein paar Funktionen schreiben, die dann sowohl in einer Unicode, als auch in einer Multibyte version verfügbar sein sollen. Da ich nicht alles doppelt schreiben will, bietet sich da ja die Verwendung von tchar an. Allerdings kann ich damit dann nur zwei getrennte dlls erstellen.
Meine Frage: Gibt es auch eine Möglichkeit, dass ich beide Versionen der Funktionen in eine Dll hineinbekomme? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Schau dir mal das Überladen von Funktionen an. Dadurch kannst du die Funktion zweimal mit dem gleichen Namen erstellen, die sich aber nur durch die Parametertypen unterscheiden.
-
genau das will ich eben nicht selbst schreiben, weil die Funktionen ja identisch sein sollen, abgesehen davon, dass die eine mit Unicode und die andere mit Multibyte arbeitet. Somit würde ich ja (mehr oder weniger) richtig schlechtes Copy-and-Paste nutzen. Das ist hier nicht die Lösung...
-
Ich verstehe dein Problem nicht.
Entweder, die Typen lassen sich gleich behandeln, dann geht das mit einer Funktion für beide Typen
oder sie lassen sich nicht gleich behandeln, dann musst du wohl oder übel zwei Funktionen schreiben.
Du kannst natürlich versuchen mit Templates zu arbeiten, wenn es zwei verschiede Typen sind aber
textuell gesehen das gleiche gemacht wird.
Damit hast du nur eine Source, später aber trotzdem zwei Funktionen.
Ich bin mir aber nicht sicher, ob und wenn ja wie das bei einer DLL geht. -
Hallo nomis,
die Antwort auf Deine Frage ist: eigentlich Nein.
Wie Du ja bereits festgestellt hast, kann man mit TCHAR Code schreiben der sowohl für Mutlibyte wie auch für Unicode kompilierbar ist. Aber eine Funktion kann dann halt nicht beides gleichzeitig. Da es auch nicht geht, dass zwei Funktionen in einer DLL den gleichen Namen haben muss man zwei DLL's machen. Wenn beides in einer DLL sein soll, dann müssen die Funktionen unterschiedliche Namen haben. Wenn Du z.B. mal in den Windows-Headern schmöckerst, dann siehst Du, dass viele Funktionen eigentlich Makros sind die auf die entsprechend Funktion verweisen:
Eine Möglichkeit es vielleicht doch hin zu bekommen wäre, wenn es in der DLL eine statische globale Variable gäbe, die anzeigt, ob man es mit Unicode oder Multibyte zu tun hat. Intern müssen dann alle Funktionen mit Unicode arbeiten und alle exportierten Funktionen müssen dann im Fall von Multibyte die entsprechenden Konvertierungen durchführen. Zu beachten ist dabei, dass man intern keine der exportierten Funktionen verwenden darf, da es dazu kommen könnte, dass Unicode als Multibyte verstanden wird und ein zweites mal konvertiert wird. Dazu kommt, dass man entweder alle char*/wchar_t* Argumente der exportierten Funktionen als void* deklarieren muss, da ein char* etwas anderes ist als ein wchar_t *. Oder man muss die Funktionen im externen DLL-Header anders deklarieren als im Internen.(interne Header/Module: void* / externer Header: TCHAR*).MessageBox -> MessageBoxA (Multibyte) -> MessageBoxW (Unicode)
-
danke, darkpandemic,...
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage