我正在創建的OBJ-C庫綁定,這樣我可以與其他球隊一起在同一個項目。爲了確保這樣做,我試圖創建一個簡單的obj-c庫,定義綁定,並在MonoTouch中使用該對象。我沒有構建問題甚至運行時異常,但是調用任何函數的返回值始終爲空。的MonoTouch /對象 - 綁定操作方法
我開始使用Xcode中創建一個新的靜態庫,並定義了「計算器」類。 .h和.m
@interface Calculator : NSObject
- (NSString*)getMessage;
@end
@implementation Calculator
- (NSString*)getMessage
{
return @"hey, look at me!";
}
@end
將此內置到文件'libXcodeLib.a'中。我定義這個類以下MonoTouch的綁定和方法:對gcc_flags
[BaseType(typeof(NSObject))]
interface Calculator
{
[MonoTouch.Foundation.Export("getMessage")]
string GetMessage();
}
除了一個額外的AssemblyInfo.cs下列要求:
[assembly: LinkWith ("libXcodeLib.a", LinkTarget.Simulator | LinkTarget.ArmV6 | LinkTarget.ArmV7, ForceLoad = true)]
最後,下面就來看看在Makefile中產生.dll文件
BTOUCH=/Developer/MonoTouch/usr/bin/btouch
all: XcodeLib.dll
XcodeLib.dll: Makefile ApiDefinition.cs AssemblyInfo.cs libXcodeLib.a
$(BTOUCH) -e ApiDefinition.cs AssemblyInfo.cs --out=XcodeLib.dll --link-with=libXcodeLib.a,libXcodeLib.a
這裏是示例代碼調用此方法:
var calc = new MTBindings.Calculator();
var msg = calc.GetMessage();
在這一點上,爲什麼味精NULL?
從所有的閱讀中,我已經做了,我看不到我錯過了什麼,使這項工作。任何新的或經過驗證的樣本/教程都將不勝感激,我不確定如何簡化這一點 - 但它仍然行不通!
得益於SO社區 - 我希望:)
你可以運送你的完整樣本給我看看嗎? – 2012-01-03 12:39:15
你可以測試是否通過在getMessage中添加NSLog來實現ObjectiveC方法「getMessage」,這可能會指向與你的庫鏈接問題 – JeanLuc 2012-01-03 13:40:03