Резюме:
У меня есть куча функций C, которые я должен вызывать из C #. Мое текущее рабочее решение основано на перегрузке функций, и мне интересно, есть ли более элегантное решение.
Материал C:
где-то в заголовочном файле
typedef struct _unknown_stuff * handle; // a opaque pointer
пример функции
func( uint num_entries,
handle * objects,
uint * n)
{ ... }
в C должна использоваться функция, подобная этой:
// warning: i bet that the syntax is not correct but you should get the idea...
uint n;
func(0, null, &n);
handle * objects = malloc(n * sizeof(handle));
func(n, objects, null);
Материал C #:
сейчас я делаю в C # следующее:
public struct handle
{
public IntPtr Pointer;
}
// version to get number of objects
[DllImport(dll, ...]
private static extern void
func( uint must_be_zero,
object must_be_null,
out uint n);
// version to get the actual data
[DllImport(dll, ...]
private static extern void
func( uint num_entries,
[Out] handle[] objects,
int must_be_zero);
и затем:
handle[] objects;
uint n = 42;
func(0, null, out n);
objects = new handle[n];
func(n, objects, 0);
Вопрос
Так как я новичок в C #, мне было интересно, если это лучший способ сделать это. Особенно я хотел бы знать, есть ли способ перегрузки функции.