我想创建一个包含某些功能定义的dll。我将能够在Objective-c和Java环境中使用这些功能。

甚至有可能这样做吗?

谢谢!

最佳答案

用C或C ++编写。您将能够通过Objective C ++将其链接到Objective C / Cocoa,并通过NDK和JNI链接到Android上的Java。那就是我在项目中所做的。在两种情况下,编译器均为GCC,但RTL并不相同,但足够相似。

避免在接口中使用冗长的数据结构,而要坚持使用基本体和基本体数组。而且,自然地,您可能需要抽象一些平台。

您可能要使用-fshort-wchar编译代码。碰巧是short是可可和JNI中的本机字符格式。虽然您会丢失RTL的宽字符串函数,但是无论如何它们都不能用于Cocoa字符串和Java字符串。或者,您可以在库/平台边界上使用UTF-8。每次通话的转换开销,yadda yadda。

注意:如果只想重用一些次要的辅助函数,则将它们编写两次或复制/粘贴然后调整语法会更容易。众所周知,调试NDK代码非常棘手。仅当共享位占项目的25-30%或更多时,才采用这种方式。就我而言,它更像是60%的共享。

编辑:如果您采用这种方式,那么将其进一步移植到其他移动平台将是一件容易的事,而有些-不会那么多。特别:


三星Bada-Snap(还有C ++和GCC,是的)
移动Qt(Meego等)-捕捉(与上述相同)
Windows Mobile 6.5及更低版本-相对容易(GCC和MSVC之间的编译器差异可能会妨碍您)
Windows 8平板电脑(又名WinRT,Metro)-与上述相同
Blackberry Playbook-理论上可能,从未尝试过
老派黑莓-不可能,全是Java
Windows Phone 7-不可能,全是C#/ VB.NET

10-02 02:24
查看更多