Слияние кода завершено, страница обновится автоматически
Динамическая библиотека
DynamicLib — это способ получения экспортируемых функций (C) из файлов dll, so или dylib. Ниже приведён простой пример.
struct ShareUser32 {
ShareUser32();
DllFunc<HWND()> GetDesktopWindow;
DllFunc<BOOL(HWND, LPRECT)> GetClientRect;
};
ShareUser32::ShareUser32()
: GetClientRect("User32.dll", "GetClientRect", DllFuncType::DTF_STDCALL)
, GetDesktopWindow("User32.dll", "GetDesktopWindow", DllFuncType::DTF_STDCALL)
{}
struct StaticUser32 {
static DllFunc<HWND()> GetDesktopWindow;
static DllFunc<BOOL(HWND, LPRECT)> GetClientRect;
};
DllFunc<HWND()> StaticUser32::GetDesktopWindow("User32.dll", "GetDesktopWindow", DllFuncType::DTF_STDCALL);
DllFunc<BOOL(HWND, LPRECT)> StaticUser32::GetClientRect("User32.dll", "GetClientRect", DllFuncType::DTF_STDCALL);
struct DllTest {
DllFunc<int()> fnDllTest;
DllTest() : fnDllTest("fnDllTest") {}
};
int main(int argc, char* argv[]) {
#ifdef WIN32
RECT rcWnd;
// Динамическое хранение и ленивая загрузка
ShareUser32 mUser32;
HWND hWnd = mUser32.GetDesktopWindow();
mUser32.GetClientRect(hWnd, &rcWnd);
// Статическое хранение и ленивая загрузка
hWnd = StaticUser32::GetDesktopWindow();
StaticUser32::GetClientRect(hWnd, &rcWnd);
#endif
char buffer[256];
_getcwd(buffer, sizeof(buffer));
//////////////////////////////////////////////////////////////////////////
DllTest DllTestInst;
// Динамическое хранилище и переключение загрузки ресурсов
#ifdef WIN32
DllTestInst.fnDllTest.Load("DllTestOne.dll");
#else
std::string OnePath(buffer);
#ifdef __APPLE__
OnePath.append("/DllTestOne.dylib");
#else
OnePath.append("/DllTestOne.so");
#endif
DllTestInst.fnDllTest.Load(OnePath.c_str());
#endif
DllTestInst.fnDllTest();
DllTestInst.fnDllTest.Free();
// Динамическое хранилище и переключение загрузки ресурсов
#ifdef WIN32
DllTestInst.fnDllTest.Load("DllTestTwo.dll");
#else
std::string TwoPath(buffer);
#ifdef __APPLE__
TwoPath.append("/DllTestTwo.dylib");
#else
TwoPath.append("/DllTestTwo.so");
#endif
DllTestInst.fnDllTest.Load(TwoPath.c_str());
#endif
DllTestInst.fnDllTest();
DllTestInst.fnDllTest.Free();
return 0;
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )