簡體   English   中英

將字符串數組從 ANSI C 編組到 C# 中的 string[]

[英]Marshalling string array from ANSI C to string[] in C#

我正在尋找一種將字符串數組從 ANSI C 編組到 C# 中的字符串 [] 的解決方案。

在 ANSI C 中看起來像:

const char *cities[] = {"Moscow", "New York", "London"};

在 C# 我有一個 System.IntPtr IntPtrCities ,我想將其轉換為字符串列表:

string[] citiesList

此外,這個解決方案倒置我需要...從 C# 中的 string[] urbanList 到 System.IntPtr IntPtrCities 到 ANSI C char ** 城市。

我試過 Marshal.PtrToStringAnsi 但它只適用於一個字符串,我不知道 ANSI C 層的字符串列表大小。

在不知道數組大小的情況下,您無法將數組直接從本機代碼編組到托管代碼。

謝謝你。 那是重要的信息!

在發現這個: https://limbioliong.wordpress.com/2011/08/14/returning-an-array-of-strings-from-c-to-c-part-1/

// This method transforms an array of unmanaged character pointers (pointed to by pUnmanagedStringArray)
// into an array of managed strings.
//
// This method also destroys each unmanaged character pointers and will also destroy the array itself.
static void MarshalUnmananagedStrArray2ManagedStrArray(IntPtr pUnmanagedStringArray, int StringCount, out string[] ManagedStringArray)
{
    IntPtr[] pIntPtrArray = new IntPtr[StringCount];
    ManagedStringArray = new string[StringCount];

    Marshal.Copy(pUnmanagedStringArray, pIntPtrArray, 0, StringCount);

    for (int i = 0; i < StringCount; i++)
    {
        ManagedStringArray[i] = Marshal.PtrToStringAnsi(pIntPtrArray[i]);
        Marshal.FreeCoTaskMem(pIntPtrArray[i]);
    }

    Marshal.FreeCoTaskMem(pUnmanagedStringArray);
}

暫無
暫無

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

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