1. 程式人生 > >動態庫def檔案的使用

動態庫def檔案的使用

DLL中匯出函式的宣告有兩種方式:一種為在函式宣告中加上__declspec(dllexport),這裡不再舉例說明;另外一種方式是採用模組定義(.def) 檔案宣告,.def檔案為連結器提供了有關被連結程式的匯出、屬性及其他方面的資訊。

首先建立 一個DLL程式,.cpp中
int __stdcall Add(int numa, int numb)
{
       return (numa + numb);
}

int __stdcall Sub(int numa, int numb)
{
        return (numa - numb);
}
然後建立一個.def的檔案,在裡面加上

;DllTestDef.lib : 匯出DLL函式
;作者:----
LIBRARY DllTestDef
EXPORTS 
Add @ 1
Sub @ 2
最後建立一個測試程式:.cpp檔案如下:
#include <iostream>
#include <windows.h>
using namespace std;

typedef int (__stdcall *FUN)(int, int);
HINSTANCE hInstance;
FUN   fun;

int main()
{
       hInstance = LoadLibrary("DLLTestDef.dll");
       if(!hInstance)
           cout << "Not Find this Dll" << endl;
       fun = (FUN)GetProcAddress(hInstance, MAKEINTRESOURCE(1));
       if (!fun)
       {
              cout << "not find this fun" << endl;
       }
       cout << fun(1, 2) << endl;
       FreeLibrary(hInstance);
       return 0;
}
說明:
.def檔案的規則為:
  (1)LIBRARY語句說明.def檔案相應的DLL;
  (2)EXPORTS語句後列出要匯出函式的名稱。可以在.def檔案中的匯出函式名後加@n,表示要匯出函式的序號為n(在進行函式呼叫時,這個序號將發揮其作用);
  (3).def 檔案中的註釋由每個註釋行開始處的分號 (;) 指定,且註釋不能與語句共享一行。

相關推薦

動態def檔案的使用

DLL中匯出函式的宣告有兩種方式:一種為在函式宣告中加上__declspec(dllexport),這裡不再舉例說明;另外一種方式是採用模組定義(.def) 檔案宣告,.def檔案為連結器提供了有關被連結程式的匯出、屬性

單目跟蹤位姿產品研發(二)----在linux下將c++工程打包成動態so檔案API

       單目跟蹤位姿專案由對方公司提供應用場景,我方研發核心演算法,通過c++實現功能,然後對方公司通過java\js來開發炫酷的介面,共同合作完成,最終對方公司負責銷售推廣,推向市場。因此,涉及到java介面呼叫c++核心程式碼的問題。 現記錄

linux關於執行編譯後命令找不到動態.so檔案的解決辦法。

方法一:(沒有root許可權)利用find找到報錯動態庫檔案目錄lib路徑,vim /home/xxx/.bashrc 新增一行: export LD_LIBRARY_PATH=動態庫/lib:$LD_LIBRARY_PATH 然後 source /home/xxx/.bashrc

linux下靜態.a和動態.so檔案的生成和使用

1.靜態庫是一些目標檔案(字尾名為.o)的集合體而已。 2.靜態庫的字尾名是.a,對應於windows作業系統的字尾名為.lib的靜態庫。 3.可以使用ar命令來建立一個靜態庫檔案。 來看一個例項,根據書中的程式碼簡化的,先看一看可以編譯成庫檔案的原始檔中的程式碼: /* test.c */ i

Android Studio打包APK後動態so檔案被改動

本人專案中遇到一個非常奇葩的問題,百思不得其解。 問題是這樣的: 由於專案是將C/C++層的程式碼與java程式碼分開管理的,所以C/C++程式碼沒有放進AS裡,編譯時將在linux下編譯好的動態庫直接放進AS工程的jniLibs下再打包生成APK。問題來了。 AS 打包A

Linux下.h與動態.so檔案的路徑新增及gcc編譯的記錄

使用場景 當你在程式中加入一個非gcc預設搜尋路徑上的一個.h標頭檔案時,會報錯“No such file”,當你的程式需要動態連結一個.so庫時,在預設路徑裡找不到該庫,也會報錯。那麼,如何解決這兩種問題呢? gcc編譯使用“-I”選項 當頭檔案非標

linux 呼叫動態so檔案

   關於動態呼叫動態庫方法說明 一、        動態庫概述 1、  動態庫的概念 日常程式設計中,常有一些函式不需要進行編譯或者可以在多個檔案中使用(如資料庫輸入/輸出操作或螢幕控制等標準任務函式)。可以事先對這些函式進行編譯,然後將它們放置在一些特殊的目的碼檔

GCC 編譯動態 so檔案時,靜態連結libmysqlclient.a 與動態連結引數一起使用問題。

直接放結論, 下面是編譯一個使用了mysql C API 的 mysql.so 檔案(我們的業務中,它是zbx加裁的modules so檔案) gcc -fPIC -shared -o mysql.so mysql.c \ -I/usr/include

建立和使用動態 使用def檔案

開啟vs2013 ,檔案-新建,取一個名字 我們這裡建立一個空的專案吧 新增標頭檔案MyDll.h 原始檔 建立原始檔dllmain.cpp,要包含window.h檔案,這個是vs2013自動生成的,但是你在建立專案的時候,選擇了空專案,所以就沒有,如果沒選擇空專案

h標頭檔案 lib檔案 dll動態檔案之間的關係

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Linux:基礎IO(檔案描述符分配規則)(重定向)(inode)(軟硬連結)(動態靜態

目錄 檔案描述符的分配規則 重定向原理 FILE 總結 理解檔案系統 inode是什麼 inode內容 硬連結 軟連結 軟硬連結區別: 動態庫和靜態庫 如何生成自己的動態庫和靜態庫 如何連結一個庫生成可執行程式 檔案描述符的分配規則 最

用Makefile編譯靜態檔案動態檔案

    最近要用到的簽名演算法只給了一堆原始碼沒有給庫檔案,api都不好呼叫,於是嘗試著用Makefile給一堆c原始碼編譯靜態連結庫檔案和動態連結庫檔案。 Makefile檔案編輯的相關資料連結: https://www.cnblogs.com/yya

安卓之Android.mk多檔案以及動態編譯

1、多檔案編譯 多檔案編譯共有兩種方式:   (1) 在Android.mk中一一新增       LOCAL_PATH:= $(call my-dir) #定義當前模組的相對路徑       include $(CLEAR_VARS)      #清空當前環境變數       LOCAL_MO

Android 檢視動態依賴的檔案

參考:http://blog.csdn.net/renwotao2009/article/details/51398739   最近工作過程中,遇到了一個庫檔案開啟失敗的問題,需要檢視so檔案依賴哪些動態庫。之前看到有同事用到ldd命令,但是本地使用ldd命令來解析arm的動態庫是不行

c編譯,呼叫動態連線 (.so檔案)

c編譯,呼叫動態連線庫 (.so檔案) C編譯: 動態連線庫 (.so檔案) Linux動態連結庫.so檔案的命名及用途總結 Linux程式設計練習(二)—— Linux下.so動態庫的建立和呼叫 在“紙上談兵: 演算法與資料結構”中,我在每一篇都會有一個C程式,用於實現演算法和資料

JAVA呼叫動態連結so檔案

最近專案在用到openjdk1.8時,出現以下異常,綜其原因是JDK1.8中libjavajpeg.so估計缺少某些函式。 記錄一下,這裡有一篇關於動態連結庫的文章,比較不錯,轉載推薦一下:http://www.cnblogs.com/duanxz/p/3651347.html Exception in t

MFC/Qt下呼叫caffe原始碼(二)---MFC下呼叫caffe的動態連線dll檔案

首先,先看下最後的效果吧。 win7 vs2013 新建一個MFC 工程 注:MFC中如何最簡便的方法將圖片顯示到對話方塊中?大家可以搜下,很多種方法,但是我採用的是最簡單的方法,即將opencv視窗繫結到MFC的PIcture control上。 在:

Linux編譯多個不同目錄下的檔案以及靜態動態的使用

轉自:http://blog.csdn.net/luotuo44/article/details/16970841 一、  編譯不同目錄下的多個檔案 各個檔案的佈局如下:         head.h檔案的程式碼:

C++ 基礎(五)使用vs2015封裝c++生成.dll檔案、.lib檔案、.h檔案後,給另一個工程使用:使用前,需配置標頭檔案(.h)靜態(.lib)和 動態(.dll )專案屬性

一、簡介 我是一個認真的人,要麼不寫,要麼我就把步驟、截圖、程式碼,一 一 附上,方便大家參考學習。 1、為什麼要生成DLL和lib?      就是為了給VS工程呼叫(比如C#呼叫、C++工程)。 2、C#為什麼要呼叫DLL和lib? C++寫的程

Linux下檢視可執行檔案動態的ELF頭等資訊

      用法: readelf <option(s)> elf-file(s)       作用: 和Windows下的PE檔案類似,ELF檔案是linux系統下可執行檔案、動態庫檔案、靜態庫檔案的標準格式。有時候我們需要檢視ELF檔案的頭資訊,或者動態庫檔