0

このプロジェクトのバインディングプロジェクトを作成しようとしました: https ://github.com/tolo/HHServices

プロジェクトは、下位レベルのCクラスdns_sd.hを使用します。これをバインディングプロジェクトにインポートする方法がわかりません。

これを除いて、バインドする必要のあるすべてのクラスは問題ありません。

#import <Foundation/Foundation.h>
#include <dns_sd.h>                       // Note this!

@interface HHServiceSupport : NSObject {
@private
    CFRunLoopRef runLoop;
@protected
    DNSServiceRef sdRef;
}

@property (nonatomic, readonly) DNSServiceRef sdRef;

@property (nonatomic, assign) DNSServiceErrorType lastError;
@property (nonatomic, readonly) BOOL hasFailed;

- (void) doDestroy;
- (void) dnsServiceError:(DNSServiceErrorType)error;

- (void) openConnection;
- (void) closeConnection;

@end

これに対する私のバインディングは次のようになります。

[BaseType (typeof(NSObject))]
interface HHServiceSupport
{

//    @private
//        CFRunLoopRef runLoop;
//    @protected
//        DNSServiceRef sdRef;


//Do I bind the above??!


//@property (nonatomic, readonly) DNSServiceRef sdRef;
[Export("sdRef")]
DNSServiceRef SDRef { get; set; }

//@property (nonatomic, assign) DNSServiceErrorType lastError;
[Export("lastError")]
DNSServiceErrorType LastError { get; set; }

//@property (nonatomic, readonly) BOOL hasFailed;
[Export("hasFailed")]
bool HasFailed { get; set; }

 //- (void) doDestroy;
[Export("doDestroy")]
void  DoDestroy();

//- (void) dnsServiceError:(DNSServiceErrorType)error;
[Export("dnsServiceError:")]
void  DnsServiceError(DNSServiceErrorType error);

//- (void) openConnection;
[Export("openConnection")]
void  OpenConnection();

//- (void) closeConnection;
[Export("closeConnection")]
void  CloseConnection();

}

cライブラリdns_sd.hを参照する方法がわからないため、DNSServiceRef、DNSServiceErrorTypeなどのクラスへの参照がないため、ライブラリはビルドされません(これらは不明であると言っています)。

これに関してオンラインですべてのドキュメントを調べましたが、ネイティブcライブラリを参照する方法について言及しているものは見つかりませんでした。

これに関して私が見つけることができる最も近い同様の質問は次のとおりです。dns_sd.hのDNSSDObjectsとMonoTouchのD​​NSServiceResolveを参照していますが、これは未回答です。

どんな援助でも大歓迎です。

ps:私の最終的な目標は、ピアツーピアのBonjourを有効にして、GameKitを使用する代わりに、デバイス間でTCPソケット接続を確立できるようにすることです。

4

2 に答える 2

1

dns_sd.hのDNSSDObjectsとMonoTouchのD​​NSServiceResolveを参照することに対する私の答えを見てください。dns_sdを呼び出すだけなので、役立つかどうかはわかりません。

于 2013-01-05T03:54:33.983 に答える
0

私の質問に対する直接の答えではありませんが、iOS6ではp2pネットワーク(Bluetooth)でBonjourを公開できるようになり、自分のDNSSDObjectをラップする必要がなくなりました。

AppleのiOS6リリースノートから:

BonjourNSNetServiceクラスとCFNetServiceAPIには、デフォルトでP2Pインターフェースが含まれていません。P2Pインターフェースを介してサービスを参照、登録、または解決するには、アプリは以下に示すBonjour DNSService *()APIを使用する必要があります。次のAPIでinterfaceIndexパラメーターをkDNSServiceInterfaceIndexAnyに設定すると、デフォルトではP2Pインターフェースが含まれなくなります。P2Pインターフェースを含めるには、kDNSServiceInterfaceIndexAnyを使用するときにkDNSServiceFlagsIncludeP2Pフラグを設定するか、interfaceIndexをkDNSServiceInterfaceIndexP2Pに設定する必要があります。

于 2013-01-13T08:08:48.767 に答える