怎样创建可供Lua调用的C dll,typedef的语法(函数指针,返回值为const char *)有什么问题
(我正在使用Visual Studio 2015 Professional)
首先,我想知道从C dll中导入函数的正确方法是否为:创建指向它们的指针,并通过'LoadLibrary'和'GetProcAddress'分配这样指针的值。我尝试这样做是因为我无法正确地构建我的C代码并从Lua交互式控制台调用它。这是一个令人绝望的尝试。然而,我得到了下面的错误,希望能够理解。
其次,我不知道如何纠正这个警告: 'C4090:'function'与'const'限定符不同'
这是我尝试编译的dll的缩短版本。
'``` //stdafx.h #pragma once
#include"targetver.h"
#define WIN32_LEAN_AND_MEAN //从Windows头文件中排除不常用的东西
#ifdef __cplusplus extern "C" { #endif #include <lua.h> #include <lualib.h> #include <lauxlib.h> #include <windows.h> #include <stdlib.h>
typedef const char * ( CALLBACK* luafnptr_typename ) ( lua_State *L, int tp ); #ifdef __cplusplus } #endif '```
以及这个代码文件:
'``` //dllmain.c #include"stdafx.h"
HINSTANCE hDLL; luafnptr_typename l_typename = NULL;
BOOL load ( ); BOOL unload ( );
BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: return load ( ); case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: return unload ( ); break; } }
BOOL load ( ) { hDLL = LoadLibrary ( "C:/Lua/5.2.4/lua5.2.4.dll" ); if ( hDLL != NULL ) { l_typename = ( luafnptr_typename ) GetProcAddress ( hDLL, "lua_typename" ); if ( !l_typename ) { FreeLibrary ( hDLL ); return FALSE; } } return TRUE; }
BOOL unload ( ) { free ( l_typename );// <<< 此行报告警告 l_typename = NULL; return TRUE; }
'```
最后,我也得到了许多“LNK2001 unresolved external symbol [X]”和“LNK2019 unresolved external symbol [X] referenced in function [Y]”这样的错误。
例如:
'LNK2001:unresolved external symbol _floor LuaExperiment C:\Users\Kauan\Documents\Visual Studio 2015\Projects\LuaExperiment\LuaExperiment\lua5.2.4-static.lib(lvm.obj)'
以及:
'LNK2019:unresolved external symbol _floor referenced in function _luaO_arith LuaExperiment C:\Users\Kauan\Documents\Visual Studio 2015\Projects\LuaExperiment\LuaExperiment\lua5.2.4-static.lib(lobject.obj)'
我只是通过进入“Project->Properties->Linker->Input->Aditional Dependencies->Edit…”将Lua添加到项目中,并添加了值'C:\Lua\5.2.4*.lib',没有其他内容。
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
