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