Hallo Experten,
ich habe folgendes Problem und komme nicht weiter.
Über Google und die Suche im Forum war ich bislang erfolglos. (Ich hoffe ich hab' nicht nur vorbei gesucht 😃)
Ich habe in meinem Projekt einen Verweis aus den COM Schnittstellen eingebunden, der mir eine Klasse anbietet, die in C++ realisert wurde.
Dort gibt es mitunter zwei Methoden, die ich versuche aufzurufen.
dynamic GetData(ref object pvarArray) -> ich kriege Daten von der Methode
bool WriteData(ushort usIdentifier, ref object pvarArray) -> ich übergebe Daten zur weiterverarbeitung.
(pvarArray ist in beiden Fällen ein Pointer auf ein Byte Array=Daten.)
Der Aufruf der GetData Metode funktioniert in dieser Form. Warum das nur so funktioniert habe ich auch noch nicht verstanden und diesen Ansatz nur "ergoogelt"
byte[] baData = null;
dynamic Variant = baData;
MyObject.GetData( ref Variant);
Den Aufruf der Write Methode kriege ich nicht ans laufen. Der folgende Ansatz läßt sich zwar compillieren, verursacht aber die unten benannte Laufzeitfehlermeldung.
byte[] baData = new byte[3] { 1, 2, 3 };
dynamic Variant = baData;
Ret = MyObject.WriteData((ushort)25,ref Variant);
Fehlermeldung:
Eine nicht behandelte Ausnahme des Typs "System.Runtime.InteropServices.COMException" ist in mscorlib.dll aufgetreten.
Zusätzliche Informationen: Typkonflikt. (Ausnahme von HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH))
Wie muss ich das richtig machen ?
Gruß
Lars
PS: entschuldigt die vielleicht nicht immer richtigen Begrifflichkeiten der Beschreibung 😃
Nachtrag: Ich arbeite mit VS Express 2012 und Windows7
...............Es gibt 10 Arten von Menschen ...............
die einen kennen binäre Zahlen, die anderen nicht!!!
OK,
habe durch diese Beschreibung: einen anderen Ansatz gefunden.
VariantWrapper Class
byte[] baData = new byte[3] { 1, 2, 3 };
object var = new System.Runtime.InteropServices.VariantWrapper(baData);
Ret = MyDiag.DiagWriteDataByIdentifier((ushort)ID, ref var);
Damit bekomme ich schon mal keine Laufzeitfehlermeldung mehr.
Leider kommt aber nicht 1,2,3 in der Methode an, sondern D5, D5, D5.
Vielleicht Zufallswerte von Stack?
Edit: Die D5 könnte auch ein "falscher" Zugriff in der Methode sein. Also scheint der Aufruf so erst mal zu funktionieren !!!! 😃 !!!!
Bin dankbar für Hinweise 😃
Gruß
...............Es gibt 10 Arten von Menschen ...............
die einen kennen binäre Zahlen, die anderen nicht!!!