この C API 宣言が与えられた場合、どのように C# にインポートされるでしょうか?
int _stdcall z4ctyget(CITY_REC *, void *);
私はこれまでに得ることができました:
[DllImport(@"zip4_w32.dll",
CallingConvention = CallingConvention.StdCall,
EntryPoint = "z4ctygetSTD",
ExactSpelling = false)]
private extern static int z4ctygetSTD(ref CITY_REC args, void * ptr);
当然、C# では "void *" はコンパイルされません。
一部のグーグルは、「オブジェクト」として翻訳する必要があることを示しています。それはうまくいくようです。しかし、他の人は、「Void * は、C/C++ 用語では関数ポインターと呼ばれ、C# 用語ではデリゲートである」と示しています。ここではあまり意味がありません。何に委任するのでしょうか? Google で見つけた他の API の同様の呼び出しでは、それぞれの API で他の関数を使用しています。しかし、この API では、他の呼び出しは意味がありません。
呼び出しのドキュメントには、次の例が示されています。
z4ctyget(&city, “00000”);
これは、静的な値でも渡すことができることを示しているようです。
void * の代わりに object でコンパイルされます。これが正しいかどうかはわかりませんし、テストする機会もありません (ライセンスの問題)。