kostenloser Webspace werbefrei: lima-city


Eine DLL, Unicode Multibyte

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    nomis

    nomis hat kostenlosen Webspace.

    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?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. t*****b

    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.
  4. Autor dieses Themas

    nomis

    nomis hat kostenlosen Webspace.

    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...
  5. 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.
  6. 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:
    MessageBox -> MessageBoxA (Multibyte)
               -> MessageBoxW (Unicode)
    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*).

  7. Autor dieses Themas

    nomis

    nomis hat kostenlosen Webspace.

    danke, darkpandemic,...
  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!