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

发布时间:2018-10-5 21:49

2901 1 0

1149

用户头衔:VIP会员

关注 私信
本帖最后由 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]


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











本帖子中包含更多资源

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

x
B Color Smilies

扫码加入QQ群

842848001@qq.com
842848001

GMT+8, 2024-4-24 12:35

Powered by Discuz! X3.4© 2001-2017 Comsenz Inc.

网站内容仅供用于学习和交流,请遵循相关法律法规

QQ在线咨询|小黑屋|手机版|Archiver|一切从零开始 ( 蜀ICP备15031375号-3 )