ERLEDIGT
NEIN
NEIN
ANTWORTEN
0
0
ZUGRIFFE
707
707
EMPFEHLEN
-
Ich grüße euch!
Ich schaffe nicht einen bestimmten Typ richtig in C# zu marshallen. Genauer gesagt geht um die SP_INF_INFORMATION Struktur, die folgender Maßen in der Setupapi.h definiert wird:Diese Struktur wird von der SetupGetInfInformation Funktion gefüllt. Hier mein Code:Code :1 2 3 4 5 6 7 8
// // Inf file information structure. // typedef struct _SP_INF_INFORMATION { DWORD InfStyle; DWORD InfCount; BYTE VersionData[ANYSIZE_ARRAY]; } SP_INF_INFORMATION, *PSP_INF_INFORMATION;
InfFile ist ein Managed Object, was ein InfFile repräsentiert und besitzt ein valides Handle. Bei dem 2. Aufruf der SetupGetInfInformation Funktion bekomme ich einen FatalExecutionEngineError. Die ersten 2 Felder der SP_INF_INFORMATION Struktur werden korrekt ausgefüllt. Nur leider wird das Byte-Array anscheinen nicht richtig gemarshallt bzw. weiß ich nicht wie ich das anstellen soll.Code csharp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
/// <summary> /// Stores information about an INF file, including the style, number of constituent INF files, and version data. /// </summary> /// <remarks>http://msdn2.microsoft.com/en-us/library/aa377644.aspx</remarks> [StructLayout ( LayoutKind.Sequential, CharSet = CharSet.Auto )] internal struct SP_INF_INFORMATION { public InfStyle InfStyle; public int InfCount; public byte[] VersionData; } /// <summary> /// Returns the <see cref="SP_INF_INFORMATION"/> structure for the specified INF file to a buffer. /// </summary> /// <remarks>http://msdn2.microsoft.com/en-us/library/aa377383.aspx</remarks> /// <param name="InfSpec">Handle or a file name for an INF file, depending on the value of SearchControl.</param> /// <param name="SearchControl">This parameter can be one of the <see cref="Inflnformation"/> constants.</param> /// <param name="ReturnBuffer">The return buffer.</param> /// <param name="ReturnBufferSize">Size of the return buffer.</param> /// <param name="RequiredSize">The required buffer size.</param> /// <returns></returns> [DllImport("setupapi.dll", SetLastError = true)] static extern bool SetupGetInfInformation( [In] IntPtr InfSpec, [In] Inflnformation SearchControl, [In, Out] ref SP_INF_INFORMATION ReturnBuffer, [In] int ReturnBufferSize, [In, Out] ref long RequiredSize ); public static bool SetupGetInfInformation( InfFile infFile, out SP_INF_INFORMATION infInformation ) { long requiredSize = 0; infInformation = new SP_INF_INFORMATION(); SetupGetInfInformation( infFile.Handle, Inflnformation.INFINFO_INF_SPEC_IS_HINF, ref infInformation, 0, ref requiredSize ); return SetupGetInfInformation( infFile.Handle, Inflnformation.INFINFO_INF_SPEC_IS_HINF, ref infInformation, (int) requiredSize, ref requiredSize ); }

Hier der komplette Fehlercode:
Zitat von FatalExecutionEngineError
- Kann mir jemand sagen, was ich hier falsch mache? Ich habe leider noch keine große Erfahrung mit P/Invoke.
- Wo finde ich ein gescheites Tutorial, wo alle möglichen Datentypen an Beispielen erklärt werden?

MfG,
Christian
Wer sein Problem definiert, hat es schon halb gelöst!
Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.
The Code Project! - C# Programming | C# / VB.NET Pendants
Regeln + Netiquette
Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
und vor allem nicht auf das, was euch die IHK dazu erzählt!
Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...
Ähnliche Themen
-
Serielle Ports aus setupapi.dll auslesen
Von sharkscream im Forum JavaAntworten: 0Letzter Beitrag: 11.06.10, 17:33 -
c-dll in .net verwenden
Von nullpunkt im Forum C/C++Antworten: 0Letzter Beitrag: 14.04.08, 07:56 -
[C#] C++ DLL verwenden
Von Passer im Forum .NET CaféAntworten: 1Letzter Beitrag: 08.07.07, 21:58 -
CVS verwenden
Von doctiffo im Forum .NET ArchivAntworten: 1Letzter Beitrag: 24.04.05, 12:07 -
JList verwenden
Von thodtie im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 3Letzter Beitrag: 28.10.04, 10:30





Zitieren
Login





