如何在c#字符串和C Char指针之间进行转换

本文关键字:之间 指针 转换 Char 字符串 | 更新日期: 2023-09-27 18:13:35

我有一个用C写的大库,我想在c#程序中用作DLL。大多数C代码将由库自己的函数使用,但我确实需要一个函数能够从c#项目中调用。

下面有一个C函数的例子

__declspec(dllexport) char* test(char* a){
    char* b = "World";
    char* result = malloc(strlen(a) + strlen(b) + 1);
    strcpy(result, a);
    strcpy(result, b);
    return result;
}

现在在c#代码中,我得到了using System.Running.InteropServices;[DllImport("mydll.dll")],但我不确定如何声明的功能。

public static extern char* test(char* a);显然不起作用,因为c#不像C那样支持指针。

那么我应该如何传递一个字符串给这个C函数,并让它返回一个字符串?

如何在c#字符串和C Char指针之间进行转换

您正在查找MarshalAs属性:

   [DllImport("mydll.dll")]
   static public int test([MarshalAs(UnmanagedType.LPStr)]String a);

至于返回一个动态分配的C字符串,这是个坏主意。如何可靠地取消对字符串的分配?这是内存泄漏的配方。在c#中分配一个字节数组,将其固定并将其与大小一起传递给C代码,以便C代码可以将结果复制到其中。然后使用System.Text.Encoding.ASCII.GetString()转换为字符串。