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