Lua5 1中載入dll動態鏈結庫的方法

2022-09-21 02:18:08 字數 1182 閱讀 4830

一、載入專門為lua寫的擴充套件dll

使用require或package.loadlib方法,在此不做過多解釋。

二、載入不是專為lua寫的擴充套件dll

「不是專為lua寫的擴充套件dll」是指:dll中並沒有以lua註冊函式的方式匯出介面,而是以__declspec(dllexport)形式匯出的介面。這樣就不能使用「package.loadlib」方法呼叫,而要使用lua5.1封裝過的「alien.load()」方法。(lua\5.1\lua

基本用法:

1、載入alien:

複製** **如下:

require(「alien」)

2、載入動態鏈結庫:(此處以」msvcrt.dll」為例)

複製**ajgepajkkj **如下:

libc = alien.load(「msvcrt.dll」)

3、說明引數型別:(第乙個引數表示返回型別,後面的引數表示傳入引數型別)

複製** **如下:

libc.puts:types(「void」, 「string」)

alien轉換 lua numbers 為c的 numeric 型別, 轉換 nil 為 null,strings 為 const char* , userdata 為 void* 指標。而函式返回值的轉換工作正好相反 (pointer型別轉換為userdata)。

以上三步完成了dll的載入,之後便可呼叫dll中的函式來實現操作,例如:

複製** **如下:

libc.puts(「test」)

當傳入引用型別引數時,需要alien在堆疊中分配空間,lua的變數將值傳遞給函式引數,如:

複製** **如下:

scanf = libc.scanf

scanf:types(「int」, 「string」, 「ref int」, 「ref double」)

_, x, y = scanf(「%i %lf」, 1, 1) — 後面兩個引數沒有實際意義,只是為了說明引數個數

呼叫時輸入23和24.5,輸入的這2個引數才是真正需要傳遞給函式的引數,ref int, ref double是告訴alien需要分配空間,呼叫c函式從棧中獲取它的引數,呼叫結束後將返回結果放到棧中(ajgepajkkj為了區分返回結果和棧中的其他的值,每個c函式還會返回結果的個數),然後lua函式返回結果值。

本文位址: /jiaoben/lua/124072.html

QT中載入動態鏈結庫

一.新增第三方的標頭檔案 這個問題再簡單不過了,不過我還是要說下。首先,新增標頭檔案 include controlcan.h 然後,再將這個標頭檔案放到工程的目錄下,就ok了,非常的簡單 二.新增.lib檔案 首先,將.lib檔案放到對應的工程目錄下 當然,放到其他路徑也可以 但是,僅僅做這一步是...

如何在C 中載入自己編寫的動態鏈結庫(DLL)

如何在 c 中載入自己編寫的動態鏈結庫 dll 李偉華 msn liweihua200204 hotmail.com 一 發生的背景 在開發新專案中使用了新的語言開發c 和新的技術方案web service,但是在新專案中,一些舊的模組需要繼續使用,一般是採用c或c 或delphi編寫的,如何利用舊...

如何在C 中載入自己編寫的動態鏈結庫(DLL)

如何在 c 中載入自己編寫的動態鏈結庫 dll 李偉華 msn liweihua200204 hotmail.摘要 本文主要講述如何在 c 中逐步實現載入自己用 c 語言編寫的動態鏈結庫,以及在匯入時如何進行c 和 c 語言的資料型別匹配 c c 動態鏈結庫 載入資料型別匹配 一 發生的背景 在開發...