【问题标题】:Linking to a C++ native library in MonoTouch在 MonoTouch 中链接到 C++ 本机库
【发布时间】:2012-01-04 21:27:47
【问题描述】:

我正在阅读有关将本机库链接到 MonoTouch 的内容,特别是此文档:

http://monotouch.net/Documentation/Linking_Native_Libraries

这里描述了到 C 库的链接。是否也可以从 MonoTouch 链接到 C++ 库?我对 MonoTouch 非常陌生,尤其是导入库,所以如果确实可能的话,我将不胜感激有关尝试导入 C++ 库时可能遇到的问题的任何建议。将 C++ 库包装在 Objective-C 库中,然后使用 btouch 导入这是一个不错的途径吗?还是有更简单的方法?请记住,我对 C++(以及与此相关的 Objective-C)的了解可以最好地描述为“危险的”。 ;)

我问的原因是我需要使用 Sybase 的 C++ API 来访问他们的 Ultralite 数据库。我设法获得了一个示例应用程序,该应用程序使用 Objective-C 访问在 Xcode 中工作的 Ultralite C++ API。但现在我正在尝试将此示例移植到 MonoTouch。示例应用程序可以在这里找到:

https://github.com/BruceHill/Ultralite-Names-Sample-ObjC

Xcode 的 Sybase 文档提到以下内容,参考在 Xcode 中使用 API:

本教程使用 UltraLite C++ API。为了消除转换为 C 类型的需要,请将源代码编译为 C++。要将项目编译为 C++:

  1. 在 Search in Build Settings 框中,输入 Compile Sources As。
  2. 从 Value 字段中的选项中选择 Objective-C++

这对在 MonoTouch 中使用此 API 有何影响?

【问题讨论】:

  • 您是否碰巧对此有所了解?我已经使用 SWIG 构建了 C 存根和 C# 对象包装器,目前正试图让 MonoTouch 的链接正常工作,但如果你已经解决了所有这些问题,我不介意看看。
  • 嗨,肯尼。是的,我很久以前就开始工作了。我会考虑将源代码放到 github 上,以便您查看。
  • @BruceHill - 你有没有更新过 GitHub 上的解决方案?我的朋友正在研究这个确切的东西,并说它不在问题的链接中......

标签: xamarin.ios monodevelop


【解决方案1】:

您当然可以使用 C++ api,但您需要将其包装在 C api 或 ObjC+btouch api 中才能与之对话。调用 C api 使用 PInvoke,而 C++ 库使用符号修饰。虽然理论上您可以对重整符号进行 pinvoke,但这不是一个好主意,因为重整是特定于编译器的。

【讨论】:

  • 谢谢,杰夫。我有一种感觉,我必须包装 C++ api 才能使用它;我只是希望有一种更简单的方法,因为它是一个相当大的 api 来包装。好吧,我想我知道这个周末我会做什么!呵呵,我想我会用 ObjC+btouch 包装它,因为我已经设法在 ObjC 中构建了一个简单的 hello world 库,然后用 btouch 绑定类型。我必须说,我很高兴看到 btouch 使用起来如此简单。 :) 它在我的第一次尝试中起作用!哇! :) 再次感谢您的帮助。
猜你喜欢
  • 2014-09-17
  • 2013-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多