Mono C#PInvoke - 从外部lib获取CFString

时间:2011-08-11 14:48:40

标签: c# c mono monomac cfstring

我有一个返回CFString的lib,我试图在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");
}

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

由于

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

尝试:

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

然后使用:

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

答案 2 :(得分:0)

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