idlize

Форк
0
75 строк · 1.7 Кб
1
#include "load-library.h"
2
#include "arkoala-logging.h"
3

4
#if defined(KOALA_WINDOWS)
5

6
#include <windows.h>
7
// Here we need to find module where GetArkAnyAPI()
8
// function is implemented.
9
void* FindModule()
10
{
11
#if KOALA_USE_LIBACE
12
    HMODULE result = nullptr;
13
    const char libname[] = "./native/ace_compatible_mock.dll";
14
    result = LoadLibraryA(libname);
15
    if (result) {
16
        return result;
17
    }
18
    LOG("Cannot find module!");
19
    return nullptr;
20
#else
21
     return (void*)1;
22
#endif
23
}
24
extern "C" void* GENERATED_GetArkAnyAPI(int kind, int version);
25

26
void* FindFunction(void* library, const char* name)
27
{
28
#if KOALA_USE_LIBACE
29
    return (void*)GetProcAddress(reinterpret_cast<HMODULE>(library), TEXT(name));
30
#else
31
    return (void*)&GENERATED_GetArkAnyAPI;
32
#endif
33
}
34

35
#elif defined(KOALA_OHOS) || defined(KOALA_LINUX) || defined(KOALA_MACOS)
36

37
#include <dlfcn.h>
38
void* FindModule()
39
{
40
#if KOALA_USE_LIBACE
41
#if defined(KOALA_OHOS)
42
#if defined(__aarch64__)
43
    const char libname[] = "/system/lib64/module/libace_compatible_mock.so";
44
#elif defined(__arm__)
45
    const char libname[] = "/system/lib/module/libace_compatible_mock.so";
46
#endif
47
#else
48
    const char libname[] = "./native/libace_compatible_mock.so";
49
#endif
50
    void* result = dlopen(libname, RTLD_LAZY | RTLD_LOCAL);
51
    if (result) {
52
        return result;
53
    }
54
    LOGE("Cannot load libace: %s", dlerror());
55
    return nullptr;
56
#else
57
    return (void*)1;
58
#endif
59
}
60

61
extern "C" void* GENERATED_GetArkAnyAPI(int kind, int version);
62
void* FindFunction(void* library, const char* name)
63
{
64
#if KOALA_USE_LIBACE
65
    return dlsym(library, name);
66
#else
67
    return (void*)&GENERATED_GetArkAnyAPI;
68
#endif
69
}
70

71
#else
72

73
#error "Unknown platform"
74

75
#endif

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.