在Monotouch中绑定使用c库的项目(dns_sd.h)

时间:2012-09-02 11:39:30

标签: binding xamarin.ios

我试图为这个项目编写一个绑定项目: https://github.com/tolo/HHServices

Project使用较低级别的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库的文档。

我能找到的最接近的类似问题是:Referring to DNSSDObjects in dns_sd.h and DNSServiceResolve in MonoTouch没有答案。

非常感谢任何协助。

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

2 个答案:

答案 0 :(得分:1)

看看我对Referring to DNSSDObjects in dns_sd.h and DNSServiceResolve in MonoTouch的回答。不确定它是否对你有帮助,因为它只是简单地调用dns_sd。

答案 1 :(得分:0)

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

来自Apple的iOS6发行说明:

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