Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#15

AW: Record/Struct rückgabe by ref/var

  Alt 23. Mai 2015, 11:28
Ich bin auch etwas verwirrt. Vielleicht habe ich auch etwas falsch verstanden. Könntest Du noch einmal genau wiedergeben, wie die Methode in der DLL deklariert ist, oder den Post zeigen, wo das erklärt ist.
Gerne doch wenn es hilft.

Der Wrapper Schnittstelle zwischen BassVis.dll und der .NET Anwendung.
Damit User die VB_NET verwenden nicht so viel Probleme mit unmanaged code haben.
Zudem können beide .NET Environment dann diese eine DLL als reference zum Projekt hinzufügen.

Die Class BASSVIS_PARAM..
Code:
    [Serializable, StructLayout(LayoutKind.Sequential)]
    public sealed class BASSVIS_PARAM
    {
        public int VisHandle;
        public IntPtr VisGenWinHandle;
        public BASSVISKind Kind;
        public BASSVIS_PARAM(BASSVISKind kind)
        {
            this.Kind = kind;
            this.VisHandle = 0;
            this.VisGenWinHandle = IntPtr.Zero;
        }

        public BASSVIS_PARAM(BASSVISKind kind, int visHandle)
        {
            this.Kind = kind;
            this.VisHandle = visHandle;
            this.VisGenWinHandle = IntPtr.Zero;
        }
    }
und die external Funktion vom Export aus der BassVis.dll
Code:
//BASSVIS_Free
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("bass_vis.dll", EntryPoint = "BASSVIS_Free", CharSet = CharSet.Auto)]
public static extern void BASSVIS_Free(ref BASSVIS_PARAM param);
Der Record in BassVis.dll (Delphi Seite)
Delphi-Quellcode:
  PBASSVIS_PARAM = ^TBASSVIS_PARAM;
  TBASSVIS_PARAM = record
    VisHandle : HVIS; // VisHandle
    VisGenWinHandle : DWORD; // General Vis Window Handle W5
    Kind : TBASSVIS_KIND_T; // Aktive Plugin Art
  end;
die Funktion die exportiert wird.
procedure BASSVIS_Free(var Base: TBASSVIS_PARAM); stdcall;

gruss
  Mit Zitat antworten Zitat