在C#中使用DllImport導入非托管函數時,如果要處理字符串參數,需要將字符串參數聲明為IntPtr類型,然后使用Marshal.StringToHGlobalAnsi或Marshal.StringToHGlobalUni方法將字符串轉換為指向非托管內存的指針,然后傳遞該指針給非托管函數。
以下是一個示例代碼,演示如何處理字符串參數:
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);
}
}
在上面的示例中,我們定義了一個名為YourFunction的非托管函數,接受一個指向字符串的指針作為參數。在Main方法中,我們首先將C#字符串轉換為非托管內存中的指針,然后將該指針傳遞給YourFunction函數。最后,記得在使用完字符串指針后釋放內存。