Hallo, ich hab ein problem mit dem Benutzen von unmanged code.
Folgende Situation:
ich habe eine dll von der ich den Quellcode leider nicht einsehen kann,
ausserdem habe ich 2 .h Datein in denen Funktionen und Enums beschrieben sind.
Die Funktionen kann ich alle mit dllimport benutzen, nur die Funktionen die als Rückgabewert einen Enum haben, bereiten mir probleme. Ich kann Sie aufrufen und sie werden auch ausgeführt nur als Rückgabewert bekomme ich eine ca. 8 stellige Integer (Sieht mir aus wie nen pointer) zurück.
Kann ich von diesem Pointer oder integer irgendwie wieder Rückschlüsse auf den eigentlichen Wert des Enums schliessen?
SomeEnum x = SomeMethod(ref _deviceObject, devicePort);
[DllImport("somedll.dll")]
private static extern SomeEnum SomeMethod(ref IntPtr someVariable, int iPort);
Wenn ich nun dieses aufrufe habe ich in x diesen besagten 8 stelligen Integer stehen.
Ausserdem habe ich noch eine .lib Datei.. aber mit der weis ich überhaupt nichts anzufangen.
Hoffe irgendjemand kann mir bei meinem Problem helfen.
Gruss
Hallo unconnected,
vermutlich ist der Wert, den zu zurückbekommt, eine Verknüpfung von mehreren Enum-Werte. Das ist dann sehr wahrscheinlich, wenn in dem Original-Enum die Werte als 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020 usw. definiert sind. Siehe auch FlagsAttribute-Klasse
herbivore
Leider ist dem nicht so.. die enums sind immer ohne lücken durchnummeriert. Noch irgendwelche vorschläge? so nen Mist das muss doch irgendwie fluppen...
mal abgesehen von nem enum.. wenn ich aus so einer methode einen Pointer auf ein object bekomme, von dem ich nicht weis was es ist, kann ich dem irgendwie nachgehen?
Hallo unconnected,
tja, wenn aus der Doku der Funktion nicht hervorgeht, warum man da solche Werte zurückbekommt, dann weiß ich auch nicht.
herbivore
mist zu spät.. herbivore, ich hab den letzten beitrag nochmal editiert gehabt.