2

CFStringを返すlibがあり、C#でその文字列値を取得しようとしています。問題は、C#でこれを行う方法がわからないことです。

外部関数がCFStringを返すようにすると、「アンマネージコードに渡されるType 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");
}

誰かがこれを行う方法を知っているなら、私を助けてください;)

ありがとう

4

2 に答える 2

1

試す:

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

次に、以下を使用します。

 new CFString (test ()).ToString ();
于 2011-08-11T18:25:30.390 に答える
0
  1. UnixMarshal.StringToHeap を使用して文字列を IntPtr に変換します。
  2. UnixMarshal.PtrToString を使用して IntPtr を文字列に変換します。
于 2012-11-07T03:42:30.770 に答える