Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#20

AW: is a 'field' but is used like a 'type'

  Alt 11. Apr 2015, 23:00
Letztendlich habe ich die Lösung dann doch selbst noch erarbeitet (nicht aus dem Internet)

Code:
  [Serializable, StructLayout(LayoutKind.Sequential)]
  public struct HTAGS
  {
    private IntPtr _htags;

    public IntPtr HTags
    {

      get { return _htags; }

      set { _htags = value; }

    }

  }
Jetzt geht das!
Code:
    //TagsLibrary_Create
    [DllImport("TagsLib.dll", EntryPoint = "TagsLibrary_Create", CharSet = CharSet.Auto)]
    public static extern HTAGS TagsLibrary_Create();
und das! (Darum ging es mir.. Die API gleich zu halten mit den Aufruf Konventionen.
Code:
    //TagsLibrary_Free
    [return: MarshalAs(UnmanagedType.Bool)]
    [DllImport("TagsLib.dll", EntryPoint = "TagsLibrary_Free", CharSet = CharSet.Auto)]
    public static extern bool TagsLibrary_Free(HTAGS Tags);
in der Anwendung wird dann einmalig HTAGS definiert.
Code:
Dim hTags As HTAGS
Code:
hTags = TagsLib.TagsLibrary_Create()

If TagsLib.TagsLibrary_Free(hTags) Then
    MessageBox.Show("Is Free")
End If
In Delphi ist der Aufruf wie folgt!
t_TagsLibrary_Free = function (Tags: HTags): LongBool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF};

Und genau diese Art des Aufrufs wollte ich beibehalten Tags: HTags
Deshalb schreibe ich die Lib (Wrapper in C#) damit Developer mit VB_NET sich mit der API nicht rumquälen müssen.


gruss

Geändert von EWeiss (12. Apr 2015 um 01:59 Uhr)
  Mit Zitat antworten Zitat