ZBarのMonoTouchバインディングが正常に動作していますが、Obj-Cライブラリが定義している定数NSStringを公開するのに問題があります。 NSDictionaryの:ZBarReaderController.h内部MonoTouchバインディングを介してObj-C const NSStringを公開する
:
extern NSString* const ZBarReaderControllerResults;
Iは初めて文書hereとして結合実際MonoTouchで介して試みた:
[Static]
interface ZBarSDK
{
[Field ("ZBarReaderControllerResults")]
NSString BarcodeResultsKey { get; }
}
これを含むプロジェクトをビルドしようとすると
がbtouchから、これらのエラーを与えた:
未処理の例外:System.ArgumentOutOfRangeExceptionが:引数が範囲外です。
パラメータ名:System.String.Substring(のInt32のstartIndex)でのstartIndex
[0x00000]:0 Generator.Generate(のSystem.Type型)[0x00000]内で
:Generator.Goで0
() [0x00000]で:でBindingTouch.Mainで0
(可能System.String []引数)[0x00000]:0
[ERROR] FATAL未処理の例外:System.ArgumentOutOfRangeExceptionが:引数が範囲外です。
パラメータ名:System.String.Substring(のInt32のstartIndex)でのstartIndex
[0x00000]:0 Generator.Generate(のSystem.Type型)[0x00000]内で
:Generator.Goで0
() [0x00000]で:でBindingTouch.Mainで0
(可能System.String []引数)[0x00000]:0
私は次のこの他のSO answerに示唆されているように、手動でコードを呼び出すことを試みました。
public static NSString BarcodeResultsKey
{
get
{
var libHandle = Dlfcn.dlopen("libzbar.a",0);
// I also tried this with "__Internal", rather than "libzbar.a"
return Dlfcn.GetStringConstant(libHandle, "ZBarReaderControllerResults");
}
}
それは構築し、罰金実行し、ちょうど(それはリンクに失敗した場合、それがどうなるDlfcn.GetStringConstant文書として)空の文字列を返します。
他の誰かが第三者Obj-Cライブラリからconst文字列にアクセスしましたか?
私は**あなたの実装ファイルの中に** 'ZBarReaderControllerResults'を定義したと思いますか?あなたはその実装とリンクしていますか?また、私はDlfcnが静的ライブラリ(.aファイル)で動作することを期待していません。ダイナミックライブラリ(.dylibファイル)用であり、そのライブラリが見つかっていることを確認する必要があります。 [dlopen(1)のマニュアルページ](https://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man3/dlopen.3.html)を参照してください。 –
私は個人的にはそうではありませんが、SDKで提供されているヘッダーファイル内にzbar SDKライブラリ(libzbar.aライブラリ)が実装されていると仮定しています。そして、そうですね、それは間違いなくその実装と正しく結びついています - 私はライブラリの重要な部分をすべて既に持っています(ReaderViewControllerの表示、バーコードのキャプチャなど)。 dlfcnとdlopenに関しては、私はdlopenを使ったことがありませんし、Unixスタイルのネイティブプログラミングをしていたこともありませんでした。私は確信が持てませんでした。 – Tyson
これは、https://bugzilla.xamarin.com/show_bug.cgi?id=4333として記入されました(ありがとうございます)。 – poupou