c#dllimport 如何處理字符串參數(shù)

c#
小樊
109
2024-07-15 15:49:35

在C#中使用DllImport導(dǎo)入非托管函數(shù)時(shí),如果要處理字符串參數(shù),需要將字符串參數(shù)聲明為IntPtr類型,然后使用Marshal.StringToHGlobalAnsi或Marshal.StringToHGlobalUni方法將字符串轉(zhuǎn)換為指向非托管內(nèi)存的指針,然后傳遞該指針給非托管函數(shù)。

以下是一個(gè)示例代碼,演示如何處理字符串參數(shù):

using System;
using System.Runtime.InteropServices;

class Program
{
    [DllImport("YourDll.dll", CallingConvention = CallingConvention.Cdecl)]
    private static extern void YourFunction(IntPtr str);

    static void Main()
    {
        string inputString = "Hello World";

        IntPtr stringPointer = Marshal.StringToHGlobalAnsi(inputString);
        
        YourFunction(stringPointer);

        Marshal.FreeHGlobal(stringPointer);
    }
}

在上面的示例中,我們定義了一個(gè)名為YourFunction的非托管函數(shù),接受一個(gè)指向字符串的指針作為參數(shù)。在Main方法中,我們首先將C#字符串轉(zhuǎn)換為非托管內(nèi)存中的指針,然后將該指針傳遞給YourFunction函數(shù)。最后,記得在使用完字符串指針后釋放內(nèi)存。

0