lua載入dll檔案套路

2021-07-23 22:30:28 字數 2216 閱讀 3870

在做遊戲的時候,經常會要使用dll來封裝庫給lua來使用。本文將用於說明如何來通過lua來載入dll。

在loadlib.c檔案中的127lines

static

void *ll_load (lua_state *l, const

char *path)

static lua_cfunction ll_sym (lua_state *l, void *lib, const

char *sym)

當載入dll檔案的時候,分為兩步來走:

首先通過預定的package.cpath搜尋目錄來查詢dll檔案是否存在。

這裡是乙個指定載入目錄的例項

package.cpath = package.cpath .. ';c:/my_lua_dll_lib/?dll;'
通過getprocaddress到你的dll檔案中查詢入口函式。這個函式名是乙個固定的:

loadlib.c檔案中能讀到這個**:

/* prefix for open functions in c libraries */

#define lua_pof "luaopen_"

#define pof lua_pof

static

int loader_c (lua_state *l)

static

const

char *mkfuncname (lua_state *l, const

char *modname)

輸入的引數只有」your_dll_name」,在mkfuncname函式將會拼接函式。

lua是乙個預設為c語言的引擎,在使用vs來編寫dll的時候,預設建立原始檔的時候將會為cpp檔案。所以這個裡面寫的function的時候,預設是使用的c++的語法。當被匯出的時候我們可以通過depends工具來分析dll中的function:

如果**是c和c++混編的時候,注意這個點。如果函式是在cpp中編寫的那就需要在函式開始的地方加上:

extern

"c"

參考

//#include "stdio.h"

#include "windows.h"

#ifdef _cplusplus

extern "c"

#endif

int luaopen_add(lua_state *l)

int alert(lua_state *l)

int isquare(lua_state *l)

// test_load_dll.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include

#include

#include

#include

#define win32_lean_and_mean

#include

typedef

int(*lua_cfunction) (lua_state *l);

int main(int argn, char *argv)

std::string dll = argv[1];

std::stringstream ss;

ss << "*********************"

<< dll << ".dll";

std::string dll_name = ss.str();

hinstance lib = ::loadlibrarya(dll_name.c_str());

if (lib == null)

ss.str("");

ss << "luaopen_"

<< dll;

std::string sym = ss.str();

lua_cfunction f = (lua_cfunction)::getprocaddress((hinstance)lib, sym.c_str());

if (f == null)

return

0;}

lua載入csv檔案

文章 author my name date 2013 12 16 18 52 11 csv解析 去掉字串左空白 local function trim left s return string.gsub s,s end 去掉字串右空白 local function trim right s ret...

Untiy動態載入 dll檔案

這裡先說一下反射 system.reflection命名空間 2 assembly 程式集類 3 module 模組 4 type 使用反射得到型別資訊的最核心的類 我們用assembly類來載入已經打包好的dll檔案。實現 我在這裡呼叫的是dll檔案裡的class1類的myfun 方法 協程的意義...

動態載入類(動態載入DLL檔案) zz

本人剛剛開始編寫程式不久,開發中發現一非常好的方法。大家共享。我們在編寫程式的時候經常會遇到這樣的情況 程式中要用到某種計算,而且這種計算的計算方式很多,我們不得不在編寫程式時就要考慮的十分全面,將各種情況到考慮到。但是這樣做又非常的費力,因為我們無法 到程式編好後,還會出現什麼樣的計算方式。如果計...