Неверное возвращаемое значение из внешней функции C, точка входа может иметь к этому отношение? - PullRequest
1 голос
/ 24 июля 2011

Я скомпилировал статическую библиотеку в xcode, она содержала только один исходный файл .c:

int Get10()
{
    return 10;
}

И вот как это включено в исходный файл .cs:

    [DllImport ("__Internal",EntryPoint="UIRectFrameUsingBlendMode")]
    private static extern int Get10 ();

Но возвращаемое значение Get10 () равно 0. Обратите внимание, что EntryPoint имеет тип UIRectFrameUsingBlendMode, для этого нет никаких причин, если я удаляю точку входа, функция Get10 () не найдена, и возникает исключение на этот счет, хотя это, вероятно, связано с проблемой. Проблема заключается в том, что я не уверен, какую точку входа определить как lib - это в основном один исходный файл c с функцией. Я пытался использовать EntryPoint = "Get10", но это привело к:

System.EntryPointNotFoundException: Get10 at (обертка ChicksnVixens.ChicksnVixensGame: Get10 () в ChicksnVixens.ChicksnVixensGame..ctor () [0x000a0] в /ChicksnVixens/ChicksnVixensGame.cs:36

Код компилируется и запускается в MonoDevelop в симуляторе iPhone.

Есть идеи, почему?

1 Ответ

1 голос
/ 25 июля 2011

EntryPoint должен, если он присутствует, соответствовать имени вашего нативного метода.Это полезно, если вы хотите переименовать метод на управляемой стороне (в противном случае просто не используйте его).

Я предполагаю, что ваша библиотека не связана правильно или символ Get10 не виден (например, статическийв с).В этом случае среда выполнения должна выдавать исключение EntryPointNotFoundException.

И «nm», и «otool» могут перечислять то, что экспортируется из вашей статической библиотеки (т. Е. Вы должны увидеть Get10, иначе это проблема сборки в вашей нативной библиотеке).Посмотрите 'man' на обоих инструментах, чтобы получить списки.

...