Это зависит от того, насколько динамично вы хотите получить. Если вы хотите динамически загружать 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 этого кода может быть полезен другим, кто найдет этот вопрос.