• lua三底漆:lua转让c/c++库(动态链接模式)


    dll按功能luaL_openlib出口,然后lua使用package.loadlib导入库函数,基本就是这么个过程,以下上代码来说明一切。


    #include "stdafx.h"
    
    
    #ifdef __cplusplus
    extern "C"{
    #endif
    
    #include "lua.h"
    #include "lualib.h"
    #include "lauxlib.h"
    
    #ifdef __cplusplus
    }
    #endif
    
    #include <math.h>
    
    #pragma comment(lib, "lua51.lib")
    
    
    static int math_abs(lua_State *L)
    {
    	lua_pushnumber(L, abs((int)luaL_checknumber(L, 1)));
    
    	return 1;
    }
    
    static int math_cos(lua_State *L)
    {
    
    	lua_pushnumber(L, cos((double)luaL_checknumber(L, 1)));
    
    	return 1;
    
    }
    
    static int math_sin(lua_State *L)
    {
    
    	lua_pushnumber(L, sin((double)luaL_checknumber(L, 1)));
    
    
    	return 1;
    }
    
    static const luaL_reg mathlib[] = {
    	{ "abs", math_abs },
    	{ "cos", math_cos },
    	{ "sin", math_sin },
    	{ NULL, NULL }
    };
    
    
    static int ShowMessage(lua_State * L)
    {
    	lua_pushnumber(L, 1000);
    	printf("show message and push 1000 
    ");
    	return -1;
    }
    
    
    #ifdef _WIN32
    extern "C" __declspec(dllexport) int luaopen_luadlllib(lua_State* L)
    {
    #else
    extern "C"  int luaopen_luadlllib(lua_State* L)
    {
    
    #endif // _WIN32
    
    	//MessageBox(NULL, TEXT("Register C++ Functions..."), NULL, MB_OK);
    
    	luaL_openlib(L, "DY_MATH", mathlib,0);
    	return 1;
    }
    


    --region loadlib.lua
    	--Date
    	--此文件由[BabeLua]插件自己主动生成
    
       --(package.loadlib("./../Debug/libforlua", "luaopen_luadlllib"))()
        --(package.loadlib("./../Debug/libforlua.dll", "luaopen_luadlllib"))()
        local libpath="./../Debug/libforlua.dll"
        local loadlibfunc=package.loadlib(libpath,"luaopen_luadlllib")
        loadlibfunc()
    
    	function COS(a)
    	print("called COS in lua script")
    	return DY_MATH.cos(a)
    	end
    
    
    	function SIN(a)
    	print("called SIN in lua script")
    	return DY_MATH.sin(a)
    	end
    
    
    	function SHOWMESSAGE()
    	showmessage()
    	end
    
       
    
    	print(COS(60*3.1415926/180))
        
        print("enter a number:") 
        a = io.read("*number") 
    
    	--endregion
    


    babelua插件的设置:






    演示样例project的下载地址:http://download.csdn.net/detail/x356982611/7401781


    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    Python学习笔记:重复索引处理方法
    爬虫学习笔记:8684公交路线
    爬虫学习笔记:创建随机UserAgent池
    Python学习笔记:pandas.to_csv设置encoding='utf8sig'解决中文乱码问题
    Python学习笔记:利用pd.assign新增一列
    查看端口
    进程与线程的一个简单解释
    设计模式工厂方法模式(Factory Method)
    Java抽象类与接口的区别
    十个JDBC的最佳实践
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4652616.html
Copyright © 2020-2023  润新知