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?
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,
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
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.
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 = MarshalPtrToStringAnsi(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