Laden...

Strings zusammenbasteln geht nicht

Erstellt von WernerZ vor 18 Jahren Letzter Beitrag vor 18 Jahren 1.657 Views
W
WernerZ Themenstarter:in
9 Beiträge seit 2006
vor 18 Jahren
Strings zusammenbasteln geht nicht

Hallo !

Ich hab da einen seltsamen Fall.

Wenn ich folgende Strings habe

cmd1 = tabelle.ToString(); // = "AKTPD1"
cmd2 = "SELECT * FROM ";
cmd3 = "_BYTREREF";
cmds = cmd2+cmd1+cmd3;

dann steht in cmds am Ende : "SELECT * FROM AKTPD1" und das "_BYTEREF" fehlt.
Dies aber nur, wenn ich diesen Code in einer DLL aufrufe.
Genauer: ich habe eine unmanaged DLL und rufe von dort managed code auf, indem diese Zeilen stehen. Das Problem scheint das ...ToString zu sein. Wenn ich z.b. cmd1+cmd2+cmd3 mache,
dann steht in cmds nur "AKTPD1". Warum?

S
8.746 Beiträge seit 2005
vor 18 Jahren

Der Code funzt sicher tadellos. Der Fehler muss woanders stecken.

Ich würde mich aber sehr interessieren, wie du managed Code von einer unmanaged DLL aufrufst. Das geht eigentlich gar nicht,

T
210 Beiträge seit 2006
vor 18 Jahren

Wie genau testest Du, was in cmds steht und was in cmd1 steht? Steht vielleicht in cmd1 noch mehr als nur "AKTPD1" ?

Gruß,
T-Man

6.862 Beiträge seit 2003
vor 18 Jahren

Original von svenson
Ich würde mich aber sehr interessieren, wie du managed Code von einer unmanaged DLL aufrufst. Das geht eigentlich gar nicht,

Wieso? Wenn sein Managed Code inner COM Assembly steckt, gehts doch.

Baka wa shinanakya naoranai.

Mein XING Profil.

W
WernerZ Themenstarter:in
9 Beiträge seit 2006
vor 18 Jahren
Lösung gefunden

Richtig ist, dass der Fehler im Aufruf lag. (Da kam doch zufällig ein Spezialist bei mir vorbei 😉)

Das ganze geht ungefähr so: DBSerial ist meine managed class, die als Referenz eingebunden wurde

mein unmanaged code sieht so aus:

String* sTabellenname = __gc new String("Help";) ;

DbSerial* db = __gc new DbSerial();

sTabellenname = MarshalPtrToStringAnsi(IntPtr(pData->Tabellenname_akt));
// sTabellenname = Marshal
PtrToStringAnsi(pData->Tabellenname_akt); FALSCH
db->write_data(sTabellenname);

dann wird der managed code damit aufgerufen, indem meine Stiring Bastelei stattfindet.

der Fehler war das ich keinen IntPtr übergeben hatte