天天挂茶馆

 找回密码
 立即注册
搜索
热搜: C++
查看: 6077|回复: 1

c++调用大漠系列:如何用LUA注册大漠插件

[复制链接]

25

主题

37

回帖

7576

积分

VIP会员

积分
7576
发表于 2018-10-5 21:49:44 | 显示全部楼层 |阅读模式
本帖最后由 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]


成功调用,其他大漠函数可以按照模式套用,是不是很简单











本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

224

主题

468

回帖

42万

积分

管理员

积分
429339
QQ
发表于 2018-10-6 11:17:21 | 显示全部楼层
等待
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表