我需要一些幫助以下。我有一個C++ API(無法訪問源代碼),我正在努力處理返回char *屬性的方法,或者返回包含char *屬性的結構。根據API的文檔返回值如下:如何編組指向C#中一系列以null結尾的字符串的指針?
返回值
如果函數成功,返回值是一個指向一系列null結尾的字符串,一個用於主機系統上的每個項目,結束與第二個空字符。下面的示例示出了具有<null>
緩衝器的內容表示終止空字符:
project1<null>project2<null>project3<null><null>
如果函數調用失敗,返回值是NULL
時遇到的問題是,在只有C#返回的指針在這種情況下包含第一個值... project1。我怎樣才能得到完整的列表,以便能夠在託管端循環它們?
這裏的C#代碼:
[DllImport("vmdsapi.dll", EntryPoint = "DSGetProjectList", CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr DSGetProjectList();
調用方法:
IntPtr ptrProjectList = DSAPI.DSGetProjectList(); string strProjectList = Marshal.PtrToStringAnsi(ptrProjectList).ToString();
strProjectList只包含的第一個項目。
下面是來自API的頭文件信息...
DllImport char *DSGetProjectList dsproto((void));
下面是一個C++我已經用於測試目的控制檯應用程序的示例代碼...
char *a; a = DSGetProjectList(); while(*a) { printf("a=%s\n", a); a += 1 + strlen(a); }
每次迭代都會正確顯示列表中的每個項目。
你應該給你使用C++ API的至少簽名,也許有點C#代碼的那正在調用這個API。 – zakinster
請添加您正在調用C++的c#代碼api – mmpatel009
您是否仔細檢查了結果(長度)? –