天天挂茶馆

1149 发表于 2018-10-5 21:49:44

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

本帖最后由 1149 于 2018-10-6 21:45 编辑

1,配置好LUA环境,不会的可以看我之前的帖子


2,声明一个全局的注册函数
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;
}
3,用Notepad++在LUA文件里写入代码,路径自己填。记住要保存为ANSI的编码
RegDll("D:\\江中游\\江中游VIP文件包20170717【密码:1234】\\大漠插件\\【大漠上传】6.1720\\6.1720\\dm.dll");
4,注册LUA函数并调用,你可以放在一个按钮事件里测试
      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); //以保护模式调用一个函数。
5,调试并输出版本号
      //输出版本号
      Cdmsoft dm;
      ::CoInitialize(NULL);//初始化线程com库
      dm.CreateDispatch(_T("dm.dmsoft"));
      AfxMessageBox(dm.Ver());


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











admin 发表于 2018-10-6 11:17:21

等待
页: [1]
查看完整版本: c++调用大漠系列:如何用LUA注册大漠插件