0

我正在移植一些我们在 Windows 上的 C# 代码,以便通过 Mono 在 Mac 上使用。在我们的代码中,我们 P\Invoke 进入一个非托管 C++ dll。不幸的是,我们的构建过程只能在 Mac 上给出一个框架文件,而不是一个 dylib 文件。

当我为 Mono 移植代码时,一切正常,但 P\Invoke 进入框架文件。我尝试将框架文件添加到 /Library/Frameworks 文件夹中,该文件夹应该位于默认搜索路径中,但我不断收到 DllNotFound 异常。根据Mono Interop Guide,Mono 添加 .so 作为在 Mac 上搜索的扩展名存在问题。所以我尝试添加一个配置文件并将目标作为 .framework 文件提供,但我仍然遇到了同样的异常。Mono 指南提到使用框架执行 P\Invoke 变得更加复杂,但没有提及确切的问题或如何解决它们。

有人知道如何在 Mono 上 P\Invoke 到框架中吗?

4

1 回答 1

0

You can put your framework inside the generated app bundle, see my answer to this question: Setting path of the Native Library for DllImport on Mono for Mac

Also make sure to set the framework's installation directory relative to your application directory (ie. @executable_path/../Frameworks) in XCode's build configuration; see https://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPFrameworks/Tasks/CreatingFrameworks.html.

This is especially important when bundling more than one framework - for instance, if if you P/Invoke into some method in A.framework which depends on B.framework.

于 2012-10-18T05:04:37.737 回答