尝试导入库(DLLImport)获取System.DLLNotFoundException

时间:2011-07-24 12:53:51

标签: c# mono xamarin.ios dllimport

我在xcode中创建了一个静态cocos项目,整个项目由一个名为File.c的.c文件和这个函数组成:

   int Get10()
   {
       return 10;
   }

我为它创建了一个名为'Numbers'的目标并构建了一个项目,它创建了一个libNumbers.a。我将libNumbers.a移动到我的MonoTouch项目根目录以及我添加的其他mtouch参数区域:

  

-gcc_flags“-L $ {ProjectDir} -lNumbers -force_load   $ {PROJECTDIR} /libNumbers.a“

代码编译得很好。

因此,在我的MonoTouch项目的C#文件中,我添加了以下内容:

    [DllImport ("libNumbers.a")]
    private static extern int Get10 ();

(我也尝试过[DllImport(“Numbers.a”)])

然后在异常期间调用一个名为Get10()的函数。这会引发以下异常:

  

System.DllNotFoundException:libNumbers.a at(wrapper   托管到原生)Jabber.BaseGame:Get10()在Jabber.BaseGame.Draw   (Microsoft.Xna.Framework.GameTime dt)[0x00043] in   /Users/ahmedhakeem/Documents/Projects/goodjabberengine/MyCode/Engine/BaseGame.cs:103

从我所看到的情况来看,它似乎无法找到有问题的dll。

一个可能的原因是我将函数Get10(并将其导入)调用到单独的库项目中的源文件(即不是我添加了额外的mtouch参数的项目)。没有办法将mtouch参数添加到你正在链接的monotouch中的库项目中,所以我不认为这是一个选项。

关于如何解决这个问题的任何想法?

1 个答案:

答案 0 :(得分:3)

如果符号变为内部符号(在主应用程序内),则库与应用程序链接。在这种情况下,正确的声明将是:

[DllImport ("__Internal")]
extern static void YourLinkedNativeCode ();