2

我正在为小马调试器编写绑定,这应该很简单吧?

Pony 通过类成员“defaultInstance”访问

@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 对象?

谢谢!

[编辑] 我已将绑定更新为: using System; 使用 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。

4

2 回答 2

0

不久前我做了一个快速测试来绑定 PonyDebugger。绑定很好 - 但它没有工作,因为方法调配了IIRC。

通过快速查看,您的 linkwith.cs 看起来不完整。我的是:

[assembly: LinkWith ("libPonyDebugger.a", LinkTarget.ArmV7 | LinkTarget.Simulator,
    ForceLoad = true, 
    Frameworks = "Security CFNetwork CoreData", 
    LinkerFlags = "-ObjC -licucore" )]

我还需要包含libSocketRocket.a,更简单,因为我将框架和标志添加到小马。

[assembly: LinkWith ("libSocketRocket.a", LinkTarget.ArmV7 | LinkTarget.Simulator,
    ForceLoad = true)]

这应该给你一个非空的实例PDDebugger- 但你需要做更多的工作才能得到实际的结果。遗憾的是我没有时间进一步挖掘它,但是当你弄清楚其余部分时让我们知道:-)

于 2013-04-22T20:03:48.287 回答
0

如果您得到空值,则可能意味着本机库未正确链接。

你是在模拟器还是设备上运行?你是如何编译绑定的?您确定本机库支持您正在测试的架构吗?

于 2013-04-22T13:10:37.773 回答