封装GetProcAddress让Lua调用Windows API
来源:互联网 发布:网络推广方法和技巧 编辑:程序博客网 时间:2024/05/21 10:25
参考了云风的方法,修复了一点bug。
DWORD myLoadLibrary(const char *lpFileName){ HMODULE h = GetModuleHandleA(lpFileName); if ( h==NULL ){ h = LoadLibraryA(lpFileName); } return (DWORD)h;}static int CallApi(lua_State* L){ int n = lua_gettop(L); FARPROC fc=(FARPROC)lua_touserdata(L,lua_upvalueindex(1)); if ( fc==NULL ){ lua_pushinteger(L,0); return 1; } DWORD dwRet = 0; DWORD dwParam = 0; for (int i=0;i<n;i++) { switch (lua_type(L,i+1) ) { case LUA_TNIL: __asm{ push 0; } break; case LUA_TNUMBER: dwParam=(DWORD)lua_tointeger(L,i+1); __asm{ push dwParam; } break; case LUA_TBOOLEAN: dwParam=(DWORD)lua_toboolean(L,i+1); __asm{ push dwParam; } break; case LUA_TSTRING: dwParam=(DWORD)lua_tostring(L,i+1); __asm{ push dwParam; } break; case LUA_TLIGHTUSERDATA: dwParam=(DWORD)lua_touserdata(L,i+1); __asm{ push dwParam; } break; default: lua_pushstring(L,"unknown argument type"); lua_error(L); break; } } __asm{ call fc; mov dwRet,eax; } lua_pushinteger(L,dwRet); return 1;}int myGetProcAddress(lua_State* L){ FARPROC func = NULL; DWORD dwModule = 0; string strFuncName; int n = lua_gettop(L); if ( n>1 ){ if ( lua_isnumber(L,-2) ){ dwModule = lua_tonumber(L,-2); } if ( lua_isstring(L,-1) ){ strFuncName = lua_tostring(L,-1); } func = GetProcAddress((HMODULE)dwModule,strFuncName.c_str()); } lua_pushlightuserdata(L,func); lua_pushcclosure(L,CallApi,1); return 1;}
0 0
- 封装GetProcAddress让Lua调用Windows API
- 【Windows API学习】GetProcAddress学习
- Windows API GetProcAddress 及demo code
- 用 lua 调用 Windows 的 API
- [Windows编程] 使用API函数GetProcAddress的注意事项
- 封装Lua的调用
- 云风的个人空间 : Lua 中调用 Windows API
- GetProcAddress 调用过程约定
- windows socket api 封装
- windows API 封装
- Lua通过COM调用外部程序excel及调用windows api
- Lua通过COM调用外部程序excel及调用windows api
- C++调用Lua API接口
- C++调用Lua API接口
- 调用 GetProcAddress 失败,在 ISAPI 筛选器 "C:\Windows\MicrosoftNET\Framework\v4030319\
- GetProcAddress
- GetProcAddress
- GetProcAddress
- pythonwin的安装&解决方案
- 身体从多大年纪开始老化?
- 如何实现基于tcp进行http交互
- ADB命令使用
- 加密与解密
- 封装GetProcAddress让Lua调用Windows API
- iOS KVO概述(刚刚)
- 刷新页面后回滚到原来指定的位置
- 限定某一段时间只能干一件事
- iOS开发实现一个简易浏览器
- linux(CentOS)下Mrtg的安装詳解
- 高性能的敏感词过滤算法 可以忽略大小写、全半角、简繁体、特殊符号干扰 (二)
- 日期和天数算出推迟后的日期
- Static关键字简析