Мы наняли программиста на языке C, чтобы разработать собственный компонент для использования в приложении .NET. Мы договорились о концептуальном API. Я передам его метод двумя массивами, и он вернет массив. Сегодня я получил код. Вот заголовочный файл. Настоящие имена скрыты:Потребление родной DLL в C#
__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 Перевести пропущено и получил это:
[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)]
Два вопроса. Правильно ли этот код сформировался? Во-вторых, как мне его использовать? Подпись не имеет массивов. Я знаю, что мне, вероятно, нужно как-то использовать указатели, но как? Я не ожидаю, что вы решите это для меня, но можете ли вы указать мне на какой-то способ понять, как понять это, не пройдя курс по низкому программированию на родном языке? Благодаря!
Чтобы отключить изменение имени C++, объявите их как extern «C». Google для точного синтаксиса. –
Или используйте файл .def на стороне C вещей, которые расскажут компоновщику точно, как назвать функцию. –