windows vs2005 编译动态链接库(dll)

wang 发表于 lua 分类,标签:

windows vs2005 编译动态链接库(dll),在lua中使用,但是在lua中一直require出错,请教高手才知道,需要加__declspec(dllexport)。

在window下加入这个才会生成包含了哪些函数以及相关的信息(符号清单),可以使用dumpbin.exe /exports tools.dll查看符号清单。


c++代码:

// mytestlib.cpp : Defines the entry point for the console application.
//vs2005需要设置附加头文件库和lib库

#include "stdafx.h"


#ifdef __cplusplus
extern "C" {
#endif
    #include<lua.h>
    #include<lualib.h>
    #include<lauxlib.h>
#ifdef __cplusplus
}
#endif
/**
    要写一个lua中可以调用的函数,一般需要三个步骤,
    第一步:定义函数,而且要遵守一定的规则,即
    参数只能有一个(lua_State*),返回值也只能为
    整型int,本例中static关键字可以不写。
*/
static int add (lua_State *L)
{
    double op1 = lua_tonumber(L, -1);
    double op2 = lua_tonumber(L, -2);
    lua_pushnumber(L, op1+op2);
    return 1;
}

/**
    第二步:列出所有的本模块中供lua调用的函数,为下
    面的注册做准备
*/
static const struct luaL_Reg myfuncs[] = {
    {"add", add},
    {NULL, NULL}
};

/**
    第三步:注册函数到一个lua table中去。
*/
extern "C" __declspec(dllexport) int luaopen_mytestlib(lua_State *L)
{
    luaL_register(L, "mytestlib", myfuncs);
    return 1;
}


lua代码:

require "mytestlib"

print(mytestlib.add(1,2))




0 篇评论

发表我的评论