Подтвердить что ты не робот

Загрузка плагинов (DLL) на лету

Есть ли способ динамически загружать и вызывать функции из DLL динамически в D? Я хочу, чтобы моя программа могла загружать плагины при запуске и, возможно, "на лету".

4b9b3361

Ответ 1

Это зависит от того, какую динамику вы хотите получить. Если вы хотите динамически загружать dll и запускать некоторые предопределенные функции, здесь есть очень приятная оболочка от Wei Li здесь. Благодаря мощью шаблонов он позволяет делать такие вещи:

// define functions
alias Symbol!("MessageBoxW", int function(HWND, LPCWSTR, LPCWSTR, UINT)) mbw;
alias Symbol!("MessageBoxA", int function(HWND, LPCSTR, LPCSTR, UINT)) mba;
// load dll
auto dll = new Module!("User32.dll", mbw, mba);
// call functions
dll.MessageBoxW(null, "Hello! DLL! ", "Hello from MessageBoxW", MB_OK);
dll.MessageBoxA(null, "Hello! DLL! ", "Hello from MessageBoxA", MB_OK);

Код D1. Для D2 вам нужно заменить char[] на string, использовать toStringz() и, возможно, удалить scope. Изменить: мой D2-порт этого кода может быть полезен другим, находящим этот вопрос.