我正试图在my library版本中增加对iOS的支持.在库中,我通过DllImport个属性使用本机二进制文件中的函数.因此,例如:

[DllImport("libraryname")]
private static extern int Foo();

它在Windows(Via libraryname.dll)和MacOS(Via libraryname.dylib)上运行没有任何问题.根据我从the discussion向图书馆用户了解到的情况,我们需要用于iOS的.a文件.用户已经准备了一个简单的测试毛伊岛解决方案:Testify.zip.在第MainPage.xaml.cs条中,我们有这样的宣言:

[DllImport("fat.a", ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
private static extern int Foo();

fat.a就是用这段简单的C代码构建的:

int Foo() { return 234; }

在这里,您可以获得文件:fat.zip.构建过程:

xcrun --sdk iphoneos --verbose clang -c code.c -o code_arm64.o -arch arm64
ar -rv code_arm64.a code_arm64.o

xcrun --sdk iphoneos --verbose clang -c code.c -o code_x86_64.o -arch x86_64
ar -rv code_x86_64.a code_x86_64.o

lipo code_x86_64.a code_arm64.a -output fat.a -create
lipo -info fat.a

此外,该文件被放到Resources/Raw文件夹中,Copy to Output Directory设置为Copy always.我们在目标设备或iOS模拟器上的构建包中看到了该文件的适当位置.但是调用Foo时,我们在运行时得到异常:System.DllNotFoundException: fat.a.请参阅this comment了解更多详细信息.

因此,问题是如何在毛伊岛项目中为iOS使用带有本地二进制文件的DllImport?这完全有可能吗?

推荐答案

好吧,在this comment个月里我得到了一个答案:

  1. DllImport个属性中必须使用"__Internal".
  2. 必须将以下元素添加到csproj文件:
<ItemGroup>
    <NativeReference Include="path/to/fat.a" Kind="Static" />
</ItemGroup>

Ios相关问答推荐

SWIFT设备方向更新不正确

通过拖动更改视图位置的SwiftUI会引发UI错误

删除领域中的cartItem时出现问题

AVFoundation Camera推出变焦SWIFT

OnTapGesture在其修改的视图外部触发

Xcode 15阻止我的应用程序运行:由于实时模式录制的高比率,丢失了1条日志(log)/路标消息?

安装新版本 XCode 15.0 后无法运行应用程序 XCode

在 Swift 中,对象如何被准确地从内存中移除?

Flutter Aging Person 自定义小部件

Swift Combine:prepend() before share() 阻止初始接收器执行

iOS SwiftUI - 从以前的 struct 调用函数

有没有办法访问自动生成的 Codable 一致性的编码键?

为什么我不能让 passthrough 科目为 combine 工作?

我可以使用同一个 Firebase 应用将多个 Flutter 应用添加到一个 Firebase 数据库吗?

在主线程上发布 NSNotification

在 Swift 中追加字符串

如何在键盘上方添加工具栏?

如何使用 AFNetworking 设置超时

openURL:在 iOS 10 中已弃用

我可以在 UIScrollView 中使用 UIRefreshControl 吗?