Laden...

Funktionsaufruf C#->C++ Datentype Problem

Erstellt von Larsen vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.526 Views
L
Larsen Themenstarter:in
192 Beiträge seit 2006
vor 8 Jahren
Funktionsaufruf C#->C++ Datentype Problem

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!!!

L
Larsen Themenstarter:in
192 Beiträge seit 2006
vor 8 Jahren

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!!!