1

monomac 用の CorePlot 0.9 バインディングを使用しようとしていますが、それは難しい作業のようです。monotouch サンプルは問題なくビルドおよび実行されますが、私には必要ありません。

バインディングに CorePlotiOS.dll しか存在しなかったので、osx 用に自分でビルドする必要がありましたが、まず bmake.exe が存在しなかったので、まず monomac ソースをダウンロードして自分でビルドする必要がありました。次に、CorePlotOSX.dll をビルドしようとしましたが、コンパイルの問題が発生しました。mono touch のビルド スクリプトを見て、代わりに次の行を試してみました。

MONO_PATH=$(MONOMAC)/src mono $(MONOMAC)/src/bmac.exe -e -unsafe coreplot.cs -s=enums.cs -x=extras.cs -x=AssemblyInfo.cs  --sourceonly=list --tmpdir=osx -r:System.Drawing -r:MonoMac -lib:$(MONOMAC)/src -baselib:$(MONOMAC)/src/MonoMac.dll .

何か問題がありますか?

問題を次のように減らしました。

graph = new CPTPieChart(); 
graph.Title = "Test";

割り当ては残っているように見えますが、オブジェクトにアクセスしようとするとクラッシュします:

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000000bf887fac

VM Regions Near 0xbf887fac:
    Stack                  00000000b038d000-00000000b040e000 [  516K] rw-/rwx SM=COW  
--> Stack                  00000000bc088000-00000000bf888000 [ 56.0M] ---/rwx SM=NUL  
    Stack                  00000000bf888000-00000000c0088000 [ 8192K] rw-/rwx SM=COW  

Application Specific Information:
objc[17645]: garbage collection is OFF

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   com.apple.CoreFoundation        0x97c8aebc __CFStringEncodeByteStream + 12
1   com.apple.Foundation            0x9ac8ed49 -[NSString(NSStringOtherEncodings) getBytes:maxLength:usedLength:encoding:options:range:remainingRange:] + 263
2   com.apple.Foundation            0x9ac8e8ee bytesInEncoding + 213
3   com.apple.Foundation            0x9ac8e814 -[NSString(NSStringOtherEncodings) UTF8String] + 42
4   com.apple.CoreFoundation        0x97ce478c -[__NSCFString UTF8String] + 204
5   ???                             0x00f91208 0 + 16323080
6   ???                             0x030d708c 0 + 51212428
7   ???                             0x030d703c 0 + 51212348
8   ???                             0x016877d4 0 + 23623636

何か案は?ところでMac OSX 10.7.5を実行しています。

4

1 に答える 1

2

わかりました、それは大変でした。xcodeとmonomacを数日間戦った後、ネイティブのCorePlotフレームワーク(動的ライブラリ)がロードされていないことが判明しました。自分でロードすることになっていたことに気づいていませんでした(私はモノマック初心者です、ごめんなさい...でも、そのように静かに失敗するのはかなり醜いではありませんか??)

これを行う2つの方法:どちらか

Dlfcn.dlopen ("CorePlot.framework/CorePlot", 2); // 2 = load now, 0 = lazy load

また[assembly:MonoMac.RequiredFramework("CorePlot.framework/CorePlot")]

于 2013-01-11T15:14:49.680 に答える