2

私は pony Debugger のバインディングを書いていますが、これはかなり単純なはずです。

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 オブジェクトに渡されていることを確認するにはどうすればよいでしょうか?

ありがとう!

[編集] バインディングを次のように更新しました。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

null を取得している場合は、ネイティブ ライブラリが正しくリンクされていない可能性があります。

シミュレータまたはデバイスで実行していますか? どのようにバインディングをコンパイルしましたか? ネイティブ ライブラリが、テストしているアーキテクチャをサポートしていると確信していますか?

于 2013-04-22T13:10:37.773 に答える
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)]

これにより、 null 以外の - のインスタンスが得られるはずですが、PDDebugger実際の結果を得るにはさらに作業が必要です。悲しいことに、私はそれをさらに掘り下げる時間がありませんでしたが、残りを理解したらお知らせください:-)

于 2013-04-22T20:03:48.287 に答える