Как вызвать функцию extern C из .so файла в C#? - PullRequest
0 голосов
/ 24 марта 2020

Я получил эту функцию, она возвращает -1 и что-то печатает,

C ++

extern "C" int CsWrapper_UCPlayer_UnsetSurface(int id)
{
    int result = -1;
    printLog("UCPlayer CsWrapper_UCPlayer_UnsetSurface called.");
    if (UCPlayer_UnsetSurface)
    {
        // TODO: Unset Surfice 
    }
    return result;
}

Я скомпилирую ее для armeabi-v7a и получу файл libCsWrapper.so

Затем я go в VisualStudio 2019, делаю проект Xamarin, делаю папку libs, в ней я делаю папку armeabi-v7a, и там я помещаю файл libCsWrapper.so

в MainActivity .cs

В функции OnCreate я сделал кнопку для вызова функции testCsWrapper:

FindViewById<Button>(Resource.Id.button1).Click += (e, o) => TestCsWrapper();

И получил следующее:

 #if Android
                const string DllName = "libCsWrapper.so";
    #else
                const string DllName = "__Internal";
    #endif

    [DllImport(DllName, CharSet = CharSet.Unicode, ExactSpelling = true, EntryPoint = "CsWrapper_UCPlayer_UnsetSurface")]
     static extern int CsWrapper_UCPlayer_UnsetSurface(int id);     

    private void TestCsWrapper() {
        try
        {
            int b = CsWrapper_UCPlayer_UnsetSurface(4);  // System.EntryPointNotFoundException: 'CsWrapper_UCPlayer_UnsetSurface assembly:<unknown assembly> type:<unknown type> member:(null)'
            Log.Info("STF", "Wrapper should return -1, Wrapper returned: " + b);
        }
        catch (Exception e) {
            Log.Error("STF", "Type: " + e.GetType().ToString() + " Message:" +  e.Message.ToString());
        }
    }

И он выдает эту ошибку, когда я запускаю его на моем устройстве adb:

Type: System.EntryPointNotFoundException Message:CsWrapper_UCPlayer_UnsetSurface assembly:<unknown assembly> type:<unknown type> member:(null)

Как это может быть, если я получил extern "C" в аннотациях функций?

Редактировать 1 : Я следил за этим сайтом: https://docs.microsoft.com/en-us/xamarin/cross-platform/cpp/#creating -the-internal-wrapper-class

Надеюсь, вы в любом случае поможете мне, спасибо за ваше время.

...