iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 5
0
Software Development

闖入DLL的世界 DLL我要進來了哦系列 第 5

第五天:lib連結?斷開鎖鏈?不,今天是調用dll「靜態」

  • 分享至 

  • xImage
  •  

大家好我是Andy,今天來到了第五天,前幾天我們都看過靜態動態,昨天也試做過一個dll,那今天我們就要利用昨天的dll來完成這次的「靜態」調用函式庫。


首先我們先新增一個空白專案

之後再右邊的來源檔案按下右鍵新增項目

選擇C++檔案

Pragma comment

這個就好像連結器,前面我們有說過dll如果需要和exe做連結才能使用的時候,在靜態的時候我們就需要
一個lib檔去告訴連結器呼叫的函式在哪個dll裡面

extern

這個就是我們在dll導出函數之後,在exe這邊我們要告訴exe要呼叫哪一個函式
不然光連結沒有呼叫在主程式中呼叫dll的函數他會跟你說找不到識別項
所以這行很重要 我這次就不說三次了

程式碼

#include <windows.h>
#pragma comment(lib,"Dll5")
#include <stdio.h>
#include <stdlib.h>
extern "C" void ccc();
int main()
{
	HWND window;
	window = FindWindow(NULL, "Debug");
	SendMessage(window, WM_CLOSE, 0, 0);
	ccc();
	return 0;
}

在昨天有先帶到了Windows.h檔今天就有實際應用
敘述類的我就不再貼過來了,如果忘記的話就在上一天那邊~

重要

在建置exe的時候別忘了要把dll和lib檔案複製到資料夾裡面
如果沒有lib的話她會說無法開啟檔案.lib
而在執行exe的時候則是需要dll
之後大家也可試試看把exe和dll移到另一個新的資料夾試試看
也可以把dll拿掉看可不可以執行
靜態和動態最大的差別就是靜態需要在同一個資料夾上,但是動態不需要

重點整理

#pragma comment(comment-type,["commentstring"]) //連結靜態庫
comment-type是一個定義的標示符號
有compiler,exestr,lib,linker(這邊除了lib之外我就不解釋了,有興趣可以查一下)

  • lib
    這個就好像連結器,前面我們有說過dll如果需要和exe做連結才能使用的時候,在靜態的時候我們就需要一個lib檔去告訴連結器呼叫的函式在哪個dll裡面

commentstring是一個為comment-type提供附加信息的字符串,像是lib的話就要附加dll資料庫

結語

今天講述了如何使用exe調用dll,順帶一提今天是第一週的第一個週末,沒在上班突然好不想寫哈哈哈,下禮拜六還要補班一想到就整個憔悴天啊,好吧我們明天見。


上一篇
第四天:Dll聽話 讓我看看
下一篇
第六天:嘗試「動態」調用動態連結函式庫
系列文
闖入DLL的世界 DLL我要進來了哦30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言