私は、ソースが誤って配置された古い C++ dll に 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# コードは、呼び出す 1 つのメソッドに対してはこれまでのところ機能しているように見えますが、次の 'Sail_GetStreamAndInserts' で、主に Data_Item_List_ と 2 次元配列パラメーターを使用して、少しレンガの壁にぶつかりました。
残りのメソッドのパラメーターを定義する方法を教えていただければ幸いです。