易截截图软件、单文件、免安装、纯绿色、仅160KB

Lua 调用C写的动态库遇到的问题及解决

 最近一个项目用lua5.1.4和c++联合开发。在开发的开始阶段遇到了一点问题,问题如下:
用命令行运行:lua test.lua
lua: error loading modules 'dllforlua' from file './dllforlua.dll':
    找不到指定的程序。
因为是第一次使用,这个问题困扰了我好几天。经过多番测试,发现如下规律:
如果用require调用的时候,C动态库的文件名必须要与导出函数保持一致。
例如:动态库名字:testlua.dll,那么导出函数必须如下:
extern "C"
LUALIB_API int luaopen_testlua(lua_State *L) {
 lua_register(L, "average", lua_average);
 return 0;
}
另外一种解决方法,用package.loadlib(绝对路径.dll, "导出函数名")
然后调用这个导出函数
dllentry = package.loadlib("D:\\myprogram\\Lua\\firstC\\Release\\luatest.dll", "luaopen_suibian")
dllentry()
avg, sum = average(10, 20, 30, 40, 50)
print("The average is ", avg)
print("The sum is ", sum)
说明:luatest.dll是动态库的名字,luaopen_suibian是导出函数名,2者可以不一致。
建议用第一种方式。


相关文档:

C 宏定义的简单总结

 
我在写代码的时候喜欢使用宏,不仅使代码看起来整洁,而且用好了还能极大的减轻编码的工作量,但是如果使用不当的话,出了问题查找起来就就非常的难了,下面的总结大部分是从网上看到的,也有一些是我自己在工作中总结出来的。
宏使用中的常见的基础问题
1. 防止一个头文件被重复包含
   #ifndef BOD ......

C和C++混合编程相关问题解决方法

一 :解决C或C++中的multiple definition of问题
server.cpp
clientp2p.cpp
#include "exception.h"
#include "clientp2p.h"
clientp2p.h
中写有所有的全局变量及其初始化值
和函数声明
1.server.cpp中:
引用

#include "clientp2p.h"
int Main(....)
{
...
}
2.clientp ......

curl c api

 curl c api
关于Curl的介绍很多,这里不详细介绍,主要谈一下简单应用。
最近研究了一下Linux下的curl C API,curl c API的文档比较丰富,唯一就是查找起来,费些时间。Curl的C API和curl的PHP API,函数接口和作用大致相同,所以如果有PHP API使用经验应该很好理解。
1:CURLcode curl_global_init(long flags);函 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号