从外部库中获取CFString

本文关键字:CFString 获取 从外部 | 更新日期: 2023-09-27 18:05:09

我有一个返回CFString的库,我试图在c#中获得该字符串值。问题是我不知道如何在c#中做到这一点。

使外部函数返回CFString不会工作,因为它会抛出一个异常"类型MonoMac.CoreFoundation.CFString传递给非托管代码必须有一个StructLayout属性。"

然后我认为我可以得到字符串作为字节数组,然后将其转换为c#中的字符串,但是,我有另一个问题,我不知道如何在C中转换CFString到字节数组:/

C# Dll Import stuff
[DllImport("lib")]
public static extern MonoMac.CoreFoundation.CFString  test();   
[DllImport("lib")]
public static extern byte[] test();     

C Library sample
CFStringRef test()
{
return CFSTR("test string");
}

如果有人知道这样做的方法,请帮助我;)

谢谢

从外部库中获取CFString

尝试:

 [DllImport("lib")]
 public static extern IntPtr test();

然后使用:

 new CFString (test ()).ToString ();

    使用UnixMarshal
  1. 。StringToHeap将字符串转换为IntPtr。
  2. 使用UnixMarshal
  3. 。PtrToString将IntPtr转换为字符串。