【发布时间】:2012-01-03 09:15:35
【问题描述】:
我正在努力为 Obj-C 库创建绑定,以便我可以与另一个团队一起在同一个项目上合作。为了确保这个工作,我试图创建一个简单的 obj-c 库,定义绑定,并在 MonoTouch 中使用该对象。我没有构建问题,甚至没有运行时异常,但我调用任何函数的返回值始终为 null。
我首先使用 Xcode 创建了一个新的静态库并定义了一个“计算器”类。下面是 .h 和 .m
@interface Calculator : NSObject
- (NSString*)getMessage;
@end
@implementation Calculator
- (NSString*)getMessage
{
return @"hey, look at me!";
}
@end
这内置在文件“libXcodeLib.a”中。我为这个类和方法定义了以下 MonoTouch 绑定:
[BaseType(typeof(NSObject))]
interface Calculator
{
[MonoTouch.Foundation.Export("getMessage")]
string GetMessage();
}
以及用于 gcc_flags 的附加 AssemblyInfo.cs,其中包含以下内容:
[assembly: LinkWith ("libXcodeLib.a", LinkTarget.Simulator | LinkTarget.ArmV6 | LinkTarget.ArmV7, ForceLoad = true)]
最后,看看用于生成 .dll 文件的 Makefile
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();
此时,为什么 msg 为 NULL?
从我所做的所有阅读中,我看不出我缺少什么来完成这项工作。任何更新或经过验证的示例/教程将不胜感激,我不确定如何进一步简化 - 但它仍然不起作用!
感谢 SO 社区 - 我希望 :)
【问题讨论】:
-
你能把你的完整样品寄给我看吗?
-
你可以通过在getMessage中添加一个NSLog来测试ObjectiveC方法“getMessage”是否被执行,这可能表明你的库存在链接问题
标签: objective-c binding xamarin.ios