簡體   English   中英

將以空值終止的字符串列表從外部函數返回到.NET

[英]Returning list of null-terminated strings from external function into .NET

我正在嘗試使用VB.NET調用外部C ++函數(C#中的答案很好,我可以轉換回來),該函數返回設備名稱列表。 這以指向帶有函數簽名的以null終止的char數組(如果我誤解了所要處理的內容,請糾正我)的指針的形式出現:

long GetNames(char*** names)

我發現的類似問題的大多數答案都涉及以下內容:

long GetNames(char** names, int length)

從我閱讀的內容來看,我需要給它一個IntPtr,但是我不確定應該如何初始化它,就我而言,我不知道數組的長度。 目前,在VB模塊中,我有:

<DllImport("MyExternal.dll", CallingConvention:=CallingConvention.Cdecl)> _
Function GetNames(ByRef names as IntPtr) As UInteger
End Function

我試圖通過傳遞一個初始化為IntPtr.Zero或使用Marshall.AllocHGlobal的IntPtr來調用該函數,但是我總是得到一個AccessViolationException

我應該如何調用此函數以及如何將返回值轉換為托管字符串數組的任何想法都將受到贊賞。

編輯:我發現本機C中的示例函數調用,如下所示:

char **tmplist;
GetNames(&tmplist)

*表示指向一個指針的指針,這是非常罕見的。
我希望您正在處理c術語的指針,這是StringBuilder的ByRef調用。 如果未收到長度,則可能需要自行進行指針算術運算,直到找到空值為止。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM