Visual Basic Strings im BCB
-
Hallo zusammen,
weiß jemand, wie man Visual Basic Strings im BCB nutzt? Geht das überhaupt? Das Problem ist folgendes: Ich möchte eine DLL nutzen, die ist aber dummerweise in VB geschrieben und VB-Strings als Übergabeparameter nutzt.
D. h. im Quelltext steht etwas wie:Private Declare Function Sample_Function Lib "vb_sample.dll" (SampleParameter As String) As Integer
Das erzeugen der Lib aus der DLL geht ohne Probleme, also habe ich mir eine Include gebastelt, in dem
entsprechend steht:
IMPORT_EXPORT int __cdecl Sample_Function(char *pszSampleParameter);
Nur leider scheinen VB-Strings mehr, oder zumindest etwas anderes zu sein als ein char*.Und so passieren beim Funktionsaufruf seltsame Dinge, sprich Exceptions, Abstürze, sinnlose Rückgabewerte etc., nur halt nicht das, was passieren soll.
Wer weiß Rat?
-
Einen konkreten Lösungsvorschlag kann ich Dir leider nicht bieten. Ich kann mir aber schon vorstellen, dass es bei VB-Strings
Probleme gibt, wenn Du versuchst einen char* zu übergeben. Letztere sind bekanntlich nullterminiert, VB-Strings haben -
ähnlich wie die von Delphi übernommenen AnsiStrings an erster Stelle die Länge des Strings stehen. Wenn ich mich recht erinnere,
wird jedes Zeichen innerhalb eines VB-Strings mit zwei Byte abgespeichert. Vielleicht hilft Dir das irgendwie weiter.Ich könnte mir aber auch vorstellen, dass VB irgendeine Form von automatischem Cast-Gewurschtel macht und am Ende was ganz
anderes raus kommt - so ähnlich passiert das ja, wenn man in VB DLLs einbindet.Wenn Du die Möglichkeit hast, solltest Du mal versuchen, die DLL in VB zu debuggen, um zu sehen, was eigentlich ankommt. Du
könntest ja mal versuchen, einen VB-String in C++ "nachzubilden".Vermutlich wirst Du aber CodeGuru.com bei Deinem Problem eher fündig.
Gruß,
Alexander
-
Ich glaub, mit SysAllocString & co geht's.