Heyho,
zur Benutzung einer Dll-Funktion, die als Datenformat nur IntPtr akzeptiert, muss ich ein Byte Array irgendwie in einen IntPtr quetschen, wenn möglich ohne meinen eigenen Code unsafe zu machen. Ich habe durch Internetrecherchen die Funktion
C#-Quelltext
1:
| void System.Runtime.InteropServices.Marshal.StructureToPtr(object structure, IntPtr ptr, bool fDeleteOld) |
gefunden. Diese scheint genau das zu können, aber wenn ich folgenen Code zu kompilieren versuche:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| IntPtr tempData = System.Runtime.InteropServices.Marshal.AllocHGlobal(4 * oglWidth * oglHeight); try { byte[] tempByteData = new byte[4 * oglWidth * oglHeight]; System.Runtime.InteropServices.Marshal.StructureToPtr(tempByteData, tempData, true); } finally { System.Runtime.InteropServices.Marshal.FreeHGlobal(tempData); } |
erhalte ich eine Fehlermaldung (ArgumentException mit structure-Parameter) die da lautet: "Die angegebene Struktur muss Layoutinformationen enthalten.".
Was kann ich tun und wo liegt der Fehler? Gibt es andere Möglichkeiten die vielleicht besser geeignet sind, ein byte[] durch einen IntPtr auszudrücken?
Moderiert von Christian S.: Topic aus C# - Die Sprache verschoben am Sa 17.11.2007 um 19:37Moderiert von Christian S.: Topic aus Sonstiges (.NET) verschoben am So 25.05.2008 um 16:39