本帖最后由 1149 于 2018-10-6 21:45 编辑
1,配置好LUA环境,不会的可以看我之前的帖子
2,声明一个全局的注册函数
[mw_shl_code=cpp,true]BOOL RegDll(lua_State* L)
{
const char* path = lua_tostring(L, 1);
LRESULT(CALLBACK* lpDllEntryPoint)();
HINSTANCE hLib = LoadLibraryA(path);
if (hLib < (HINSTANCE)HINSTANCE_ERROR)
{
return FALSE;
}
(FARPROC&)lpDllEntryPoint = GetProcAddress(hLib, "DllRegisterServer");
BOOL bRet = FALSE;
if (lpDllEntryPoint != NULL)
{
HRESULT hr = (*lpDllEntryPoint)();
bRet = SUCCEEDED(hr);
if (FAILED(hr))
{
AfxMessageBox(_T("注册失败"));
}
}
FreeLibrary(hLib);
return TRUE;
}[/mw_shl_code]
3,用Notepad++在LUA文件里写入代码,路径自己填。记住要保存为ANSI的编码
[mw_shl_code=lua,true]RegDll("D:\\江中游\\江中游VIP文件包20170717【密码:1234】\\大漠插件\\【大漠上传】6.1720\\6.1720\\dm.dll");[/mw_shl_code]
4,注册LUA函数并调用,你可以放在一个按钮事件里测试
[mw_shl_code=cpp,true] lua_State *L = lua_open();//创建一个新的 Lua 状态机
luaopen_base(L);//加载基础库
luaopen_string(L);//加载字符串库
luaopen_table(L);//加载表处理库
lua_register(L, "RegDll", RegDll);//把C函数设到全局变量 name 中
luaL_loadfile(L, "main.lua"); //把一个文件加载为 Lua 代码块。
lua_pcall(L, 0, 0, 0); //以保护模式调用一个函数。[/mw_shl_code]
5,调试并输出版本号
[mw_shl_code=cpp,true] //输出版本号
Cdmsoft dm;
::CoInitialize(NULL);//初始化线程com库
dm.CreateDispatch(_T("dm.dmsoft"));
AfxMessageBox(dm.Ver());[/mw_shl_code]
成功调用,其他大漠函数可以按照模式套用,是不是很简单
|