我正在为pony Debugger编写一个绑定,这应该非常简单吗?
通过类成员“defaultInstance”
访问Pony@interface PDDebugger : NSObject
+ (PDDebugger *)defaultInstance;
我实施的是这样的:
[assembly: LinkWith ("libPonyDebugger.a", LinkTarget.Simulator, ForceLoad = true)]
namespace PonyDebugger
{
[BaseType (typeof (NSObject))]
interface PDDebugger
{
[Static] [Export ("defaultInstance")]
PDDebugger DefaultInstance { get; }
[Export ("enableViewHierarchyDebugging")]
PDDebugger EnableViewHierarchyDebugging();
}
}
我可以编译绑定正常 - 但是当我调用“PDDebugger.DefaultInstance”时,我只是返回null。我错过了什么?
我怎样才能确定消息是否传递给基础ObjC对象?
谢谢!
[编辑] 我已将我的绑定更新为: 使用系统; 使用MonoTouch.Foundation; 使用MonoTouch.ObjCRuntime;
** libPonyDebugger.linkwith.cs **
[assembly: LinkWith ("libPonyDebugger.a", LinkTarget.Simulator, ForceLoad = true,
Frameworks = "Security CFNetwork Foundation CoreGraphics UIKit CoreData", LinkerFlags = "-ObjC -licucore")]
namespace PonyDebugger
{
[BaseType (typeof (NSObject), Name="PDDebugger")]//, DisableDefaultCtor]
interface PDDebugger
{
//+ (PDDebugger *)defaultInstance;
[Static, Export ("defaultInstance")]
PDDebugger DefaultInstance();
[Export ("enableViewHierarchyDebugging")]
PDDebugger EnableViewHierarchyDebugging();
}
}
** libSocketRocket.linkwith.cs **
using System;
using MonoTouch.ObjCRuntime;
[assembly: LinkWith ("libSocketRocket.a", LinkTarget.ArmV7 | LinkTarget.Simulator,
Frameworks = "Security CFNetwork Foundation CoreGraphics UIKit CoreData", ForceLoad = true, LinkerFlags = "-ObjC -licucore")]
所有btouches /编译为本机并运行 - 但PDDebugger.DefaultInstance()仍然返回null。
答案 0 :(得分:0)
如果您获得null,则可能意味着未正确链接本机库。
您是在模拟器还是设备上运行?你是如何编译绑定的?您确定本机库是否支持您正在测试的架构?
答案 1 :(得分:0)
我刚刚做了一个快速测试来绑定PonyDebugger。绑定很好 - 但它没有用,因为方法调整 IIRC。
通过快速审核,您的linkwith.cs看起来不完整。我的是:
[assembly: LinkWith ("libPonyDebugger.a", LinkTarget.ArmV7 | LinkTarget.Simulator,
ForceLoad = true,
Frameworks = "Security CFNetwork CoreData",
LinkerFlags = "-ObjC -licucore" )]
我还需要包含libSocketRocket.a
,因为我向pony添加了框架和标志,因此更简单。
[assembly: LinkWith ("libSocketRocket.a", LinkTarget.ArmV7 | LinkTarget.Simulator,
ForceLoad = true)]
这应该会为您提供非空 PDDebugger
的实例 - 但您需要更多工作才能获得实际结果。可悲的是,我没有时间进一步挖掘它,但是当你弄清楚其余部分时,请告诉我们: - )