我正在尝试使用我的 MonoTouch 应用程序访问的一些本机代码函数制作一个 DLL。我遵循了 monotouch-bindings 使用的一般方法,您可以在其中:
- 制作一个 xcode 项目并将一些本机代码放入其中
- 使用 xcodebuild 构建静态库(.a 文件)
- 使用 --link-with 运行 btouch 以生成 .dll 文件
- 在我的 MonoTouch 应用程序中添加对 .dll 文件的引用
.. 但是每当我尝试在我的应用程序中使用这些功能时,我都会得到 System.EntryPointNotFoundException。这是我正在尝试做的每件事的代码:
在 .cpp 文件中:
extern "C" {
int SomeFunction();
}
int SomeFunction() {
...
}
用于构建 .a 文件的命令行
xcodebuild -project MyStaticLibrary.xcodeproj -target MyStaticLibrary -sdk iphonesimulator -configuration Release clean build
带有绑定的 .cs 文件 (NativeBindings.cs)
public class MyStaticLibraryBindings
{
[ DllImport( "__Internal" ) ] public extern static int SomeFunction();
}
DLL 的 AssemblyInfo.cs
using System;
using MonoTouch.ObjCRuntime;
[assembly: LinkWith ("libMyStaticLibrary.a", LinkTarget.Simulator | LinkTarget.ArmV7 | LinkTarget.ArmV7s, IsCxx = true, ForceLoad = true, Frameworks = "", WeakFrameworks = "")]
构建 .dll 的命令行
btouch -x=NativeBindings.cs AssemblyInfo.cs --out=NativeBindings.dll --link-with=libMyStaticLibrary.a,libMyStaticLibrary.a
.. DLL 构建良好,我的应用程序在编译期间看到 MyStaticLibraryBindings.SomeFunction 函数,但在运行时调用它时,我得到 System.EntryPointNotFoundException。
我已经验证 libMyStaticLibrary.a确实包含 SomeFunction:
~/build> nm libMyStaticLibrary.a*
00000167 T _SomeFunction