Учитывая эту декларацию 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 *" не компилируется.
В некоторых поисках Google указано, что оно должно быть переведено как «объект». Кажется, это должно сработать. Но другие указывают, что «Void * называется указателем на функцию в терминах C / C ++, которая в терминах C # является делегатом». Это не имеет большого смысла здесь, поскольку, что это делегировало бы? Некоторые похожие вызовы для других API, найденные через Googling, используют другие функции в соответствующем API. Но в этом API никакой другой вызов не имеет смысла.
В документации к звонку приведен пример:
z4ctyget(&city, “00000”);
Что, кажется, показывает, что даже статическое значение может быть передано.
Он будет компилироваться с объектом вместо пустоты *. Я не знаю, правильно ли это, и у меня не было возможности проверить это (проблема лицензирования).