Мы наняли программиста на C для разработки нативного компонента для использования в приложении .NET. Мы договорились о концептуальном API. Я передам его методу два массива, и он вернет массив. Я получил код сегодня. Вот файл заголовка. Настоящие имена скрыты:
__declspec(dllexport) int NativeMethod(
struct params * config,
int c_input_a_rows,
struct input_a_row *input_a_rows,
int c_input_b_rows,
struct input_b_row *input_b_rows,
int c_count,
int *p_c_output_rows,
struct output_row * output_rows);
struct params
{
int a;
int b;
int c;
double d;
double e;
int f;
int g;
char h[1000];
};
struct input_a_row
{
int a;
int b;
double c;
};
struct input_b_row
{
int a;
int b;
int c;
int d;
int e;
double f;
double g;
};
struct output_row
{
int a;
int b;
int c;
int d;
int e;
int f;
int g;
double h;
double i;
double j;
};
Исходя из этого, я сгенерировал код .NET, используя P / Invoke Interop Assistant . Я не смог заставить его работать, открыв DLL. Он пожаловался, что файл не имеет манифеста сборки. Поэтому я подключил заголовочный файл к SigImpl Translate Snipped и получил следующее:
[DllImport("the.dll", EntryPoint="NativeMethod")]
public static extern int NativeMethod(
ref params config,
int c_input_a_rows,
ref input_a_row input_a_rows,
int c_input_b_rows,
ref input_b_row input_b_rows,
int c_count,
ref int p_c_output_rows,
ref output_row output_rows);
Он также создает все структуры, как ожидалось. У каждого есть атрибут класса:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
Два вопроса. Правильно ли сгенерирован этот код? Во-вторых, как мне это использовать? Подпись не имеет массивов. Я знаю, что мне, вероятно, нужно как-то использовать указатели, но как? Я не ожидаю, что вы решите это для меня, но можете ли вы указать мне какой-то способ понять, как это понять, не пройдя курс по низкому нативному программированию? Спасибо!