Попытка импортировать библиотеку (DLLImport), получая исключение System.DLLNotFoundException - PullRequest
3 голосов
/ 24 июля 2011

Я создал статический проект cocos в xcode, весь проект состоял из одного файла .c с именем File.c и этой функции:

   int Get10()
   {
       return 10;
   }

Я создал для него цель под названием 'Numbers' ипостроил проект, который создал libNumbers.a.Я переместил libNumbers.a в мой корневой каталог проектов MonoTouch и в область дополнительных аргументов mtouch добавил:

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

Код скомпилирован нормально.

Итак, в файле C # в моем проекте MonoTouch я добавил следующее:

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

(я такжепопытался выполнить [DllImport ("Numbers.a")])

Затем во время исключения была вызвана функция Get10 ().Это вызывает следующее исключение:

System.DllNotFoundException: libNumbers.a at (Jabber.BaseGameGame: Get10 () в Jabber.BaseGame.Draw (Microsoft.Xna.Framework).GameTime dt) [0x00043] в /Users/ahmedhakeem/Documents/Projects/goodjabberengine/MyCode/Engine/BaseGame.cs:103

Из того, что я вижу, похоже, что он не может найтиdll в вопросе.

Одной из возможных причин является то, что я вызываю функцию Get10 (и импортирую ее) в исходный файл в отдельном проекте библиотеки (т.е. не в проект, в который я добавил дополнительные аргументы mtouch).Невозможно добавить аргументы mtouch к проекту библиотеки в monotouch, к которому вы привязываете, поэтому я не думаю, что это вариант.

Так есть какие-нибудь идеи, как это исправить?

1 Ответ

3 голосов
/ 24 июля 2011

Если библиотека связана с приложением, когда символы становятся внутренними (внутри основного приложения). В этом случае правильное объявление будет:

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