1. 程式人生 > >package.loadlib() 找不到指定的程式

package.loadlib() 找不到指定的程式

讀lua的loadlib()原始碼可以找到,其實載入dll的函式為GetProcAddress(),提示找不到指定的程式是因為在dll中找不到指定的函式。

因為lua使用c語言編譯,其中的函式編譯也都符合c的編譯風格,所以如果使用c++編譯出的dll,使用loadlib()就找不到其中的函式

只需要在編譯dll時,將匯出函式標誌為c風格編譯即可。

LuaTestDll.h

#pragma once

#ifdef LUATESTDLL_EXPORTS
#define LUATESTDLL_API __declspec(dllexport)
#else
#define LUATESTDLL_API __declspec(dllimport)
#endif

extern "C"
{
#include "lua/lua.h"
#include "lua/lualib.h"
#include "lua/lauxlib.h"
#include "lua/luaconf.h"


LUATESTDLL_API int luaopen_mylib(lua_State *L);

};
LuaTestDll.cpp
#include "LuaTestDll.h"

static int l_dir1(lua_State *L)
{
	lua_pushnumber(L,1);
	return 1;
}

static const struct luaL_reg mylib[] = 
{
	{"dir1",l_dir1},{NULL,NULL}
};

int luaopen_mylib(lua_State *L)
{
	luaL_openlib(L,"mylib",mylib,0);
	return 1;
}

TestDll.lua 將lua檔案和dll放到同一目錄,或者loadlib第一個引數為全路徑
func =  package.loadlib("LuaTestDll.dll","luaopen_mylib");
func();
print(mylib.dir1());



相關推薦

package.loadlib() 指定程式

讀lua的loadlib()原始碼可以找到,其實載入dll的函式為GetProcAddress(),提示找不到指定的程式是因為在dll中找不到指定的函式。 因為lua使用c語言編譯,其中的函式編譯也都符合c的編譯風格,所以如果使用c++編譯出的dll,使用loadlib(

(raspberry、bananapi)Archlinux 無法安裝yaourt解決辦法-----手工編譯(不難)(適用於package-query到)

常見問題 ==> Missing dependencies: -> package-query>=1.4 而pacman -Ss package-query無法找到(多為Archlinux arm) 那就手工編譯吧。 先去Archlinux AUR下載p

maven 在類路徑或引導類路徑中程式包 java.lang

報錯資訊: [INFO] Changes detected - recompiling the module! [INFO] Compiling 470 source files to /Users/baozhichao/workspace/meforlite/target

maven編譯時報錯:致命錯誤: 在類路徑或引導類路徑中程式包 java.lang

在Windows中可以正常編譯執行的maven工程,在linux用jenkins打包編譯時出錯[ERROR] 致命錯誤: 在類路徑或引導類路徑中找不到程式包 java.lang 是因為windows和linux分隔符有差異Windows下使用分號(;),MAC

IDEA 突然程式包問題

今天碰上IDEA突然找不到程式包問題,重啟,重新配置Artifact什麼的都沒用 應該是專案的索引系統壞了,因為這個專案一直是用iCloud資料夾在自己的MacBook和實驗室的iMac之間同步專案的

王權富貴:安裝OpenCV匯入的時候出現DLL load failed:指定模組 or %1是有效的32位程式

問題:   網上找了好多方法 (1)版本不匹配(失敗) (2)安裝microsoft Visual C++ distributed 2015 X64(失敗) (3)升級window10(沒有嘗試) (3)複製什麼什麼檔案到什麼什麼目錄下(失敗) (4)ht

關於使用EmguCV出現 “無法載入 DLL“cvextern”: 指定程式” 的解決方法

1.按要求將Emgu.CV.UI,Emgu.CV.World,Emgu.CV.World,Emgu.CV.GL新增引用到專案。 2.然後將WinForm新增一個按鈕和PictureBox,後臺程式碼如下: using System; using System.Collections.Ge

利用程式發郵件—解決報錯 java.io.FileNotFoundException: jdk1.6.0_21\jre\lib\javamail.providers (系統指定的檔案。)

import java.util.Properties; import javax.mail.Address; import javax.mail.Message; import javax.mail.MessagingException; import javax.

Import TensorFlow as tf 報錯:ImportError: DLL load failed: 指定程式

一、報錯描述 今天在新電腦上安裝TensorFlow環境,遇到一個小問題。當使用pip工具或在Pycharm中自動安裝完TensorFlow後,在程式中匯入竟然報錯了: import tensorflow as tf 如此簡單的一句匯入竟然報錯,Why。具體錯誤如下,主要是Imp

vs程式執行時報錯"未能載入 SqlServerSpatialxxx.dll,指定的模組,(異常來自......)"的解決方法

報錯原因: 因為程式中引用了Microsoft.SqlServer.Types程式集,正常情況下程式會去c:\windows\system32或者c:\windows\syswow64目錄中尋找,所以找不到。 其實你引用時已經在bin\debug\SqlServerTypes資料夾下生成了報

未能載入檔案或程式集“DAL”或其他的某一個依賴項,系統指定的檔案

    針對這個問題我在敲VB.NET機房收費系統的時候總共出現了兩次,第一次是在使用反射+抽象工廠的時候出現的,第二次是在使用VS2012自帶的打包工具生成可執行檔案執行exe檔案的時候出現的。具

VS,無法啟動指定程式,系統指定的檔案

一般出現這種情況,大多數都是從網上down下來的原始碼之類的. 問題截圖: 由於雙方環境的問題,所以不能直接使用.不過沒關係,今天我找到了解決的方法,在這裡給大家分享一下. 雖然網上可能有,但是我覺得多一份資訊,多一份找到的可能,多一份解決的機會.並且我保證絕不cop

如何解決 Windows 7 中安裝印表機驅動程式時,出現錯誤資訊"指定模組"或"XXX.dll 檔案丟失"

文章簡介 在Windows7中安裝驅動程式時,出現錯誤資訊“找不到指定模組”或“XXX.dll 檔案丟失”,您可以參考本文的步驟嘗試解決問題 應用軟體執行時一般都是優先從自己的安裝目錄中呼叫所需的模組(.dll)檔案,如沒有所需檔案再到 Windows\System

Visual Studio 2010 執行時提示無法啟動程式 系統指定的檔案問題

因為對計算機影象處理比較感興趣,所以買了 《OpenCV3程式設計入門》,根據書本的提示完成了OpenCV SDK的安裝、環境變數的配置、工程包含目錄的配置、工程庫目錄的配置、連結庫的配置以及在Windows資料夾下加入OpenCV動態連結庫的配置,然而在最終測試時在執行VC

分析器錯誤訊息: 未能載入檔案或程式集“AjaxPro.2”或它的某一個依賴項。系統指定的檔案。

VS報錯:分析器錯誤訊息: 未能載入檔案或程式集“AjaxPro.2”或它的某一個依賴項。系統找不到指定的檔案。 解決辦法:找一個AjaxPro.2.dll檔案放到bin資料夾裡就好了,我的空間這個檔案可以下載。

【記錄】tensorflow報錯DLL load failed:指定程式

更新anoconda後出現了版本不相容情況,keras不能正常使用,更新了tensorflow後測試報錯如下: 解決方法如提示:protobuf 這個庫版本不相容,按搜尋到的方法將重新安裝指定版本即可。命令如下: pip install protobuf==3.6.0

iis 錯誤127 指定程式

錯誤描述:IIS5.1(XP系統下)預設網站無法啟動,World Wide Web Publishing服務無法啟動,提示錯誤127,找不到指定程式,重灌iis後,故障依然存在。手動啟動World Wide Web Publishing服務也不能啟動了,提示錯誤127.剖析原

解決VS除錯提示“無法啟動程式,'...exe'.系統指定檔案。”的問題

圖1          當VS除錯提示上圖所示的警告時,常用的方法是檢查“專案”-“屬性”-“配置屬性”-“常規”-“輸出目錄”裡的路徑跟圖1裡的路徑是否相同,若不同,則手動改正。在這裡我的是沒有問題的,都是在bin資料夾裡,如圖2所示:​​ 圖

解決安裝驅動程式時提示“Windows已經找到裝置的驅動程式,但在試圖安裝它時遇到錯誤”“系統指定路徑”問題。

作業系統 Windows 8.1 64位 故障現象 一臺掃描器,無法安裝驅動程式,每次搜尋到驅動之後,在安裝時會提示“Windows已經找到裝置的驅動程式,但在試圖安裝它時遇到錯誤”“系統找不到指定路徑”。 解決方案 嘗試更新多種版本的驅動,無效。

未能載入檔案或程式集“”或它的某一個依賴項。系統指定的檔案——常用解決方案

最近在使用cms系統做網站時,這個cms是基於asp.net的三層架構開發的,今天在手動修改類庫專案名稱導致專案報錯一直提示未能載入檔案或程式集“”或它的某一個依賴項。 解決方案:修改類庫名字和預設包名直接在該類庫專案上點選右鍵——屬性——應用程式——修改屬性名稱和名稱空間