AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein C# is a 'field' but is used like a 'type'
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von EWeiss · begonnen am 10. Apr 2015 · letzter Beitrag vom 11. Apr 2015
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

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

  Alt 11. Apr 2015, 20:49
Zitat:
Die Funktion sollte aber den Typ HTAGS zurückgeben. Deshalb wohl auch die Anmerkung von Sailor.
NÖ.
Sie muss identisch mit dem Definierten Name sein. (Groß und Kleinschreibung beachtend)
Wenn als
Code:
IntPtr HtAgS = IntPtr.Zero;
definiert muss sie auch in folge so benannt werden.
Aber das merkt der Compiler da muss man sich selbst nicht drum kümmern.

Zitat:
Aber schlag mich bitte nicht, wenn das nicht so funktioniert wie gewünscht.
Warum sollte ich

Code:
public static extern HTAGS TagsLibrary_Create();
Genau so hab ich es gemacht.
Code:
IntPtr HTags = IntPtr.Zero;
public static extern HTags TagsLibrary_Create();
HTags = HTags
HTAGS = HTAGS

HTAGS = HTags geht nicht.. Was ich aber schon sagte (Ist mir bekannt)


gruss

Geändert von EWeiss (11. Apr 2015 um 22:02 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

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

  Alt 11. Apr 2015, 22: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 00:59 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz