Gewusst wie: importieren von void * C-API in C#?

Angesichts dieser C-API-Deklaration wie wäre es importiert zu C#?

int _stdcall z4ctyget(CITY_REC *, void *);

Habe ich in der Lage, so weit zu kommen:

   [DllImport(@"zip4_w32.dll",
        CallingConvention = CallingConvention.StdCall,
        EntryPoint = "z4ctygetSTD",
        ExactSpelling = false)]
    private extern static int z4ctygetSTD(ref CITY_REC args, void * ptr);

Natürlich in C# das "void *" nicht kompiliert.

Etwas Googlen zeigt, dass es übersetzt werden sollte " - Objekt." Scheint, wie es funktionieren sollte. Aber andere zeigen, dass die "Void * genannt wird, einen Funktionszeiger in C/C++ - Begriffe, die in C# - Bedingungen, ist ein delegieren". Das nicht machen eine ganze Menge Sinn, hier als was würden Sie delegieren? Einige ähnliche Aufrufe für die anderen APIs gefunden durch Googeln verwenden Sie andere Funktionen in der jeweiligen API. Aber in dieser API keine anderen nennen würde Sinn machen.

In der Dokumentation für den Aufruf zeigt ein Beispiel:

z4ctyget(&city, 00000”);

Scheint zu zeigen, dass auch ein statischer Wert weitergegeben werden konnten.

Wird es kompilieren mit-Objekt anstelle des void *. Ich weiß nicht, ob das richtig ist und ich hatte noch nicht die Gelegenheit es zu testen (Lizenz-Problem).

  • Meine Vermutung ist, IntPtr
  • Was wollen Sie tun, mit dem Mauszeiger, sobald du Sie hast? Ich nehme an, alles, was Sie brauchen, ist die CITY_REC struct, und Sie beabsichtigen, Sie zu ignorieren, 'ptr'?
  • Naja, ich bin mir nicht sicher. Die verfügbare Dokumentation ist nicht klar, über Sinn und Zweck der param.
InformationsquelleAutor Mike Chess | 2009-02-06
Schreibe einen Kommentar