我用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在(包装
  Jabber.BaseGame.Draw的Jabber.BaseGame:Get10()
  (Microsoft.Xna.Framework.GameTime dt)[0x00043]在
  /Users/ahmedhakeem/Documents/Projects/goodjabberengine/MyCode/Engine/BaseGame.cs:103


从我看到的内容来看,它似乎找不到有问题的dll。

一个可能的原因是我将函数Get10调用(并将其导入)到一个单独的库项目中的源文件中(即不是我添加了附加mtouch参数的项目)。无法在要链接的monotouch中将mtouch参数添加到库项目中,因此我认为这不是一种选择。

那么关于如何解决此问题的任何想法?

最佳答案

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

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

关于c# - 尝试导入获取System.DLLNotFoundException的库(DLLImport),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6806906/

10-13 05:23