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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den void* - parameter können Sie verwenden Sie einfach einen IntPtr
Können Sie auch verwenden, void*, wenn Sie markieren Sie Ihre Klasse als unsicher.
Es hängt wirklich davon ab, was die API ist auf der Suche nach in diesem parameter.
Können Sie hinzufügen, IntPtr oder Objekt* in der Vergangenheit compiler, aber Sie werden immer noch übergeben müssen es die richtigen Daten, wenn Sie es nennen.
Soweit ich sagen kann, die C-Deklaration von z4ctyget ist:
Der zweite parameter ist eine 5 Zeichen ANSI-string, der den zip-code, an dem Sie die Suche beginnen möchten, oder "00000" am Anfang der Datei. So Ihre Erklärung sollte sein: