c # 4.0 — правильная настройка параметров в C # при вызове C ++ DLL

Мне было поручено поместить оболочку C # вокруг старой библиотеки C ++, в которой исходный код потерян. У меня есть некоторые детали DLL:

enum DataItemType {DataItemType_String, DataItemType_Number, DataItemType_Date};

typedef struct Data_Item_Node_
{
char *field_name;
char *field_value;
enum DataItemType field_type;
struct Data_Item_Node_ *next;
} Data_Item_Node;

typedef struct Data_Item_List_
{
Data_Item_Node *first;      // points to first item in the list
Data_Item_Node *last;       // points to last item in the list
long count;                 // number of data items in the list
Data_Item_Node **index;     // sorted array of pointers to the list items
char *pDataDumpBuffer;      // pointer to a buffer used by the [*DumpData] command
} Data_Item_List;extern "C" SAIL_IMP_EXP BOOL WINAPI Sail_Validate(const char *sail, const char *streams, const char *inserts)extern "C" SAIL_IMP_EXP BOOL WINAPI Sail_GetStreamAndInserts(char *sail, Data_Item_List_ *data, char *stream, char inserts[][9], int insert_count)extern "C" SAIL_IMP_EXP LONG WINAPI Sail_GetErrorMessage(LPSTR error, DWORD len)

Как видите, мне нужно вызвать 3 метода. Я создал оболочку командной строки C # для тестирования и использовал DLLImport для ссылки на открытые методы:

   class Program
{

[DllImport("Sail_.dll")]
public static extern bool Sail_Validate(string sail, string streams, string inserts);static void Main(string[] args)
{
string p_sail = args[0];
string p_streams = args[1];
string p_inserts = args[2];

try
{
bool Result = Sail_Validate(p_sail, p_streams, p_inserts);

Console.WriteLine("Result: " + Result.ToString());
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
}
}
}

Этот код C #, кажется, работает до сих пор для одного метода, который он вызывает, но я натолкнулся на небольшую кирпичную стену в следующем ‘Sail_GetStreamAndInserts’, в основном с Data_Item_List_ & 2-х мерные параметры массива.

Я был бы благодарен за любую помощь в том, как определить параметры для оставшихся методов.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …