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 库的内容。

我能找到的最接近的类似问题是:Refering to DNSSDObjects in dns_sd.h and DNSServiceResolve in MonoTouch which is unanswered.

任何帮助将不胜感激。

ps:我的最终目标是启用点对点Bonjour,这样我就可以在设备之间建立TCP套接字连接,而不是使用GameKit,因为那只是一场灾难。

4

2 回答 2

1

看看我对引用 dns_sd.h 中的 DNSSDObjects 和 MonoTouch 中的 DNSServiceResolve 的回答。不确定它是否对您有帮助,因为它是对 dns_sd 的简单调用。

于 2013-01-05T03:54:33.983 回答
0

虽然这不是我的问题的直接答案,但 iOS6 现在允许您在 p2p 网络(蓝牙)上发布 Bonjour,无需包装我自己的 DNSSDObjects。

来自 Apple 的 iOS6 发行说明:

Bonjour 默认情况下,NSNetService 类和 CFNetService API 不包括 P2P 接口。要通过 P2P 接口浏览、注册或解析服务,应用程序需要使用下面提到的 Bonjour DNSService*() API。在以下 API 中将 interfaceIndex 参数设置为 kDNSServiceInterfaceIndexAny,将默认不包含 P2P 接口。要包含 P2P 接口,您现在必须在使用 kDNSServiceInterfaceIndexAny 时设置 kDNSServiceFlagsIncludeP2P 标志,或将 interfaceIndex 设置为 kDNSServiceInterfaceIndexP2P。

于 2013-01-13T08:08:48.767 回答