MarshalAs(UnmanagedType.Type) als Parameter

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von Facebamm.

    IntPtr hat nicht wirklich ein äquivalent in C/C++. IntPtr kann man für alles verwenden was nen Pointer will. Man könnte sogar IntPtr verwenden um ein int/long(abhängig von Architektur) zu übergeben.
    Edit: mir ist noch aufgefallen, dass es in C++ intptr_t gibt. Was aber eben nur ein typedef auf long/long long sein dürfte, aber eben auch abhängig von architektur.

    Was man jedoch hier haben will ist nicht ein C-Array(was ja eigt. nur ein pointer auf memory währe), sondern eben ein Pointer der verwendet wurde um eine Referenz zu übergeben, schließlich soll nach dem auslesen pnX/pnY/... Werte enthalten, die von der Funktion ausgelesen werden.
    Was aber eben mit DllImport möglich ist, ist dass du einfach ref int ... verwenden kannst. Der marshallt dies zu einem int* ... und du bekommst deine Werte korrekt zurück...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Zum check ob ich richtig bin ?

    C#-Quellcode

    1. /// <summary>
    2. /// is_InquireImageMem() reads out the properties of an allocated image buffer.
    3. /// </summary>
    4. /// <param name="pnX">Contains the width with which the image buffer was created</param>
    5. /// <param name="pnY">Contains the height with which the image buffer was created</param>
    6. /// <param name="pnBits">Contains the bit width with which the image buffer was created</param>
    7. /// <param name="pnPitch">Contains the line pitch of the image buffer</param>
    8. /// <returns>IS_SUCCESS, IS_NO_SUCCESS</returns>
    9. [DllImport("falcon.dll")]
    10. public static extern StatusResult InquireImageMem(ref int pnX,ref int pnY,ref int pnBits,ref int pnPitch);
    ja sieht soweit richtig aus. Deinem enum könntest du noch explizit int größe geben(wie bei Vererbung mit :), damit es selbst auf 128-bit kompatibel bleiben wird :D
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---