Delphi中动态调用DLL的方法
生活随笔
收集整理的這篇文章主要介紹了
Delphi中动态调用DLL的方法
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Delphi中動(dòng)態(tài)調(diào)用dll的方法如下:
function CallFunc(dllname, funcname: string; const param: array of const): DWORD; varhLib: THandle;pFunc: Pointer;intSize: Integer; beginResult := 0;hLib := LoadLibrary(PChar(dllname));if hLib <> 0 then beginpFunc := GetProcAddress(hLib, PChar(funcname));if pFunc <> nil then begin // 獲取參數(shù)大小 intSize := Length(param);// 以下匯編碼將自動(dòng)完成函數(shù)調(diào)用 asmpush ecxpush esimov ecx, intSize; // 參數(shù)的個(gè)數(shù) mov esi, paramtest ecx, ecx // 判斷是否有參數(shù) je @call // 如果沒有參數(shù)則跳轉(zhuǎn)到函數(shù)調(diào)用處@again:dec ecx push dword ptr [esi + ecx * 8] // 循環(huán)把參數(shù)壓入堆棧 cmp ecx, 0 jnz @again // 一直循環(huán)到 ecx 為0@call:call pFunc // 調(diào)用函數(shù) mov @Result, eax // 返回值pop esipop ecxend;end;FreeLibrary(hLib);end; end;然后調(diào)用的時(shí)候如下:
CallFunc('user32.dll', 'MessageBoxA', [0, 'hello world', 'title', MB_OK]); CallFunc('user32.dll', 'MessageBeep', []); CallFunc('kernel32.dll', 'Sleep', [1000]);
轉(zhuǎn)載于:https://www.cnblogs.com/xieyunc/p/9126510.html
總結(jié)
以上是生活随笔為你收集整理的Delphi中动态调用DLL的方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第四周学习进度情况
- 下一篇: Mybatis 入门之resultMap