2012-03-24 71 views
2

我试图绑定一个Xcode库,并且正在如何做到这一点拉我的头发。当我尝试访问任何事件或方法时,该应用程序崩溃非常严重。XCode库的Monotouch绑定

下面是我做

using System; 
using System.Drawing; 
using MonoTouch.Foundation; 
using MonoTouch.ObjCRuntime; 
using MonoTouch.UIKit; 

namespace BardecodeBinding 
{ 
    [BaseType (typeof(NSObject), 
      Delegates= new string [] {"WeakDelegate"}, 
      Events = new Type [] { typeof(BardecodeDelegate) })] 
    interface Bardecode 
    { 
     [Export ("delegate", ArgumentSemantic.Assign)] 
     [NullAllowed] 
     NSObject WeakDelegate { get; set; } 

     [Wrap ("WeakDelegate")] 
     [NullAllowed] 
     BardecodeDelegate Delegate { get; set; } 

     [Export("ScanBarcodeFromViewFinder")] 
     void ScanBarcodeFromViewFinder(); 
    } 

    [BaseType (typeof(NSObject))] 
    interface BardecodeDelegate 
    { 
     [Export ("didfinish:sender:notification:"), EventArgs("BardecodeDidFinish")] 
     void DidFinish (Bardecode sender, NSNotification notification); 
    } 
} 

我想给Bardecode库从Softek公司绑定(http://www.bardecode.com/)的说明。这里的(部分)的头文件

#import <Foundation/Foundation.h> 
#import <AVFoundation/AVFoundation.h> 
#include "barcode.h" 

#if TARGET_IPHONE_SIMULATOR 
@interface Bardecode : NSObject <UINavigationControllerDelegate,  UIImagePickerControllerDelegate> 
#else 
@interface Bardecode : NSObject <UINavigationControllerDelegate,  UIImagePickerControllerDelegate, AVCaptureVideoDataOutputSampleBufferDelegate> 
#endif 
{ 
... 
- (void) ScanBarcodeFromViewFinder; 
... 
} 

@interface NSObject(NSWindowNotifications) 
- (void)BardecodeDidFinish:(NSNotification*)notification; 
@end 

这里就是我尝试使用所产生的绑定

Bardecode bardecode = new Bardecode(); 
    bardecode.DidFinish += BardecodeDidFinish; 
    bardecode.ScanBarcodeFromViewFinder(); 

而且回调例程:

private void BardecodeDidFinish(object sender, EventArgs args) 
    { 
    } 

虽然文档指出一个应该生成名为BardecodeDidFinishEventArgs的类,它不是。

这是MonoDevelop添加库文件后生成的。

using System; 
using MonoTouch.ObjCRuntime; 

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

问候 保罗

回答

2

我想绑定的Xcode库和我拉我的头发就如何做到这一点。当我尝试访问任何事件或方法时,该应用程序崩溃非常严重。

您是否有这些崩溃的崩溃报告?你确切知道哪一行托管代码导致崩溃?

尽管文档声明应该生成一个名为BardecodeDidFinishEventArgs的类,但它不是。

绑定项目不生成源代码,你会看到,生成的源代码在编译后,它们会自动删除。您可以在绑定库上运行Reflector以查看生成的内容。