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

发布于 2024-11-29 05:57:51 字数 566 浏览 5 评论 0原文

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

If有人知道如何做到这一点请帮助我;)

谢谢

I have a lib that returns a CFString, and I'm trying to get that string value in C#..
The problem is that I don't know how to do this in C#..

Making the external function return a CFString won't work as it throws an exception "Type MonoMac.CoreFoundation.CFString which is passed to unmanaged code must have a StructLayout attribute."

Then I thought that I could get the string as a byte array and then convert it to a string in C#, but then, I have another problem, I don't know how to convert in C the CFString to a byte array :/

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");
}

If anyone knows a way to do this please help me out ;)

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

九局 2024-12-06 05:57:51

尝试:

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

然后使用:

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

Try:

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

Then use:

 new CFString (test ()).ToString ();
半夏半凉 2024-12-06 05:57:51
  1. 使用 UnixMarshal.StringToHeap 将字符串转换为 IntPtr。
  2. 使用 UnixMarshal.PtrToString 将 IntPtr 转换为字符串。
  1. using UnixMarshal.StringToHeap to convert string to IntPtr.
  2. using UnixMarshal.PtrToString to convert IntPtr to string.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文