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'

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

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

  Alt 10. Apr 2015, 17:22
Ich erstelle eine Class

Code:
  [SuppressUnmanagedCodeSecurity]
  public sealed class TagsLibraryDefs
  {
    IntPtr HTags = IntPtr.Zero;

    //TagsLibrary_Create
    [DllImport("TagsLib.dll", EntryPoint = "TagsLibrary_Create", CharSet = CharSet.Auto)]
    public static extern HTags TagsLibrary_Create();

  }
Und bekomme einen Fehler wie im Thread Titel beschrieben.

In C++ ist HTAGS als Public definiert da HTAGS von verschiedenen Externals verwendet werden.

Code:
typedef void* HTAGS;
Also wenn HTAGS ermittelt wurde mit TagsLibrary_Create werden in folgenden API's dieses Handle übergeben.

Beispiel:
Code:
typedef BOOL(TAGSLIBCALL *t_TagsLibrary_Free)(HTAGS Tags);
Jemand eine Idee? was schief läuft.

EDIT:
Ich könnte mir das HTAGS vielleicht sparen wenn ich direkt IntPtr zurückgebe.
Hmm....

gruss

Geändert von EWeiss (10. Apr 2015 um 17:28 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#2

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

  Alt 10. Apr 2015, 17:30
Wie wär's wenn Du das in eine Methode packst?
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

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

  Alt 10. Apr 2015, 17:46
Wie wär's wenn Du das in eine Methode packst?
Wenn ich wüsste wie das geht gerne..
Bin noch am Lernen

Wie sieht die aus?

Edit
OK.. Methode meinst du

Public IntPtr Test(..) Function
Public void Test(..) Procedure

Nur wo einsetzen
Ich schreibe ne DLL

gruss

Geändert von EWeiss (10. Apr 2015 um 18:23 Uhr)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#4

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

  Alt 10. Apr 2015, 18:59
Code:
    IntPtr HTags = IntPtr.Zero; // *1

    public static extern HTags TagsLibrary_Create(); // *2
*1 deklariert eine private Variable 'HTags' vom Typ 'Integer' und weißt ihr einen Wert zu.
*2 deklariert eine statische Methode 'TagsLibrary_Create()' mit dem Rückgabetype... 'HTags'.

Nun ist 'HTags' eine private Variable, wird aber dort verwendet, wo eigentlich ein Typ stehen soll.

In Delphi wäre das z.B.

Delphi-Quellcode:
Var
  HTags : PInteger = Nil;

Function TagsLibrary_Create() : HTags;
Das ergibt doch keinen Sinn.

Was Du willst (TypeDef) lässt sich in C# nicht machen. Du kannst am Anfang der Datei zwar 'using HTags = IntPtr;' schreiben, aber das gilt nur für die Datei. Wäre 'IntPtr' eine Klasse, könntest Du 'class HTags : IntPtr{}' verwenden, aber 'IntPtr' ist ein struct (Record) und damit geht inheritance nicht.

Verwende einfach IntPtr statt HTags.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

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

  Alt 10. Apr 2015, 19:20
Zitat:
*1 deklariert eine private Variable 'HTags' vom Typ 'Integer' und weißt ihr einen Wert zu.
*2 deklariert eine statische Methode 'TagsLibrary_Create()' mit dem Rückgabetype... 'HTags'
Und genau das habe ich gemacht mit der Rückgabe siehe Thread Titel.

Zitat:
Verwende einfach IntPtr statt HTags.
Denke auch da wird mir wohl nichts anderes übrigbleiben.
Methoden sind da auch überflüssig hab's getestet.
Da kann ich mir auch einfach in der Anwendung
Code:
Dim Tag as IntPtr
verwenden und gut ist.


gruss

Geändert von EWeiss (10. Apr 2015 um 19:23 Uhr)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#6

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

  Alt 10. Apr 2015, 19:23
Eben. Genau das hast Du gemacht. Und deshalb kommt der Fehler. Und da Du fragst 'Jemand eine Idee? was schief läuft.' ist diese Frage zumindest beantwortet, ne war.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#7

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

  Alt 10. Apr 2015, 22:09
Die beste Lösung wäre wohl:

Du kannst am Anfang der Datei zwar 'using HTags = IntPtr;' schreiben, aber das gilt nur für die Datei.
Das musst du dann eben in jeder Datei schreiben. Alternativ geht ja immer noch:

Verwende einfach IntPtr statt HTags.
Das sind jetzt zwei Wege, die relativ gut sind, und funktionieren sollten. Dass man einen Pointer noch typedef'd, damit man das richtige übergibt, ist eben typisch C++ und weniger C#. (Ein typedef Pointer ist eben immer noch ein Pointer und da könnte immer noch quasi alles dahinter stecken.)

Geändert von jfheins (10. Apr 2015 um 22:13 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 10:10 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