在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函数。最后,记得在使用完字符串指针后释放内存。