我有一些第三方iOS静态库,其中.h文件包含const struct
:
struct SomeStruct
{
__unsafe_unretained NSString * const FirstName;
__unsafe_unretained NSString * const SecondName;
__unsafe_unretained NSString * const ThirdName;
};
extern const struct SomeStruct someName;
我将这个静态库绑定到MonoTouch,但我不明白如何在C#中复制它并从该结构访问字符串值。
在MonoTouch iOS绑定项目中
public struct SomeStruct
{
public string FirstName;
public string SecondName;
public string ThirdName;
};
[Static]
public interface SomeInterface
{
[Field ("SomeStruct", "__Internal")]
IntPtr someNameStr { get; }
}
我在我的演示应用程序中包含了iOS绑定项目生成的dll
访问结构
public static SomeStruct Name {
get {
if (SomeInterface.someNameStr != IntPtr.Zero) {
return (SomeStruct)Marshal.PtrToStructure<SomeStruct> (SomeInterface.someNameStr);
}
return new SomeStruct ();
}
}
在这里,我可以获得正确的IntPtr。但我无法将其转换为结构并访问结构中的成员。
SomeInterface.Name.FirstName;
所以,有人可以帮我做这件事。
提前致谢。
答案 0 :(得分:1)
您希望使用Dlfcn中的方法来获取 someName 地址的地址。使用dlopen打开库并使用dlsym来获取地址。
然后你可以使用Marshal.PtrToStructure编组结果,但你必须确保值是IntPtr,如下所示:
public struct SomeStruct
{
IntPtr _FirstName;
IntPtr _SecondName;
IntPtr _ThirdName;
};
要获取字符串,请执行以下操作:
public string FirstName {
get {
return (string) (new NSString (_FirstName));
}
}