1

我的任务是在源代码错误的旧 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# 代码似乎适用于它调用的一个方法,但我在下一个“Sail_GetStreamAndInserts”中遇到了一些障碍,主要是使用 Data_Item_List_ 和二维数组参数。

对于如何为其余方法定义参数的任何帮助,我将不胜感激。

4

0 回答 0