對於一個經常寫javaWeb的人來說,使用Visual Studio似乎沒什麼必要,但是對於使用ffi的人來說,使用c或c++編譯器,似乎是必不可少的,下面我將講述如何用Visual Studio 2022 來建立lib和dll,並使用。
靜態庫的建立並使用
首先開啟Visual Studio 2022,點選建立新專案。
選擇靜態庫,然後點選下一步。
點選建立。
Visual Studio 2022會自動生成以下程式碼:
然後開啟專案屬性,看一下配置是不是對的,一般來說都是對的。
看看是不是lib。
接下來就是寫程式碼生成lib並測試一下:
1. 編寫程式碼:
比如說,我就想編寫一個輸出hello World的程式碼,那該如何編寫呢?
首先在標頭檔案中,建立一個hello.h的檔案
然後在標頭檔案中,定義一個sayHello的方法。
#include<stdio.h>
void sayHello();
然後Hellolib.cpp在重寫這個方法。
// Hellolib.cpp : 定義靜態庫的函式。
//
#include "pch.h"
#include "framework.h"
#include "hello.h"
// TODO: 這是一個庫函式示例
void sayHello()
{
printf("Hello World");
}
- Visual Studio自動生成lib
右鍵點選這個Hellolib
點選生成,就行了。
生成成功:
3.如何使用:
先說一下,生成的lib的位置,就是在上一級的x64的debug資料夾裡面。
在這裡面新建一個空專案,用於測試lib的,我這裡叫它testHello
在testHello裡面新建兩個資料夾,一個叫include,用來放.h的標頭檔案的,一個叫lib,用來放lib包的。
將我們生成的那個lib放進去,還有之前定義的.h檔案也放到include檔案裡面。
然後右擊testHello,開啟屬性。
然後開始調整:
配置lib
一般來說,不建立原始檔,它不會有c/c++編譯器,那個選項
然後建立一個test.cpp的原始檔。
建立原始檔後,在設定一下。
配置include檔案
我再說一遍,一定要先建立原始檔,不然是沒有c/c++的那個選項的。
然後編寫相應的程式碼。
看這個時候,就已經出來了:
編寫測試程式碼:
#include "hello.h"
int main() {
sayHello();
return 0;
}
然後點選執行,就會報錯。
這個錯誤是因為在啟動專案的時候,預設執行上一個專案了,我們將它改一下,就行了。
右擊解決方案,點選屬性。
把啟動專案改一下,改成你要執行的那個專案就行了。
執行結果:
動態庫的建立並使用
然後就是搞dll檔案,新建一個Hellodll專案。
初始化,頁面長這樣。
建立標頭檔案
#pragma once
#include"pch.h"
#ifdef MATHLIBRARY_EXPORTS
#define MATHLIBRARY_API __declspec(dllexport)
#else
#define MATHLIBRARY_API __declspec(dllimport)
#endif
extern "C" MATHLIBRARY_API void sayHello();
一樣的步驟建立cpp實現
點選HelloDll專案,右擊生成。
執行結果:
檢視生成dll的檔案
在這裡面新建一個專案 testDll
然後一樣的處理,在testDll裡面建立一個include資料夾和lib資料夾,include資料夾裡面放標頭檔案,lib資料夾裡面放dll和lib
和
然後設定一下include屬性
然後設定一下dll和lib
和
然後編寫程式碼:
#include "Hello.h"
int main()
{
sayHello();
return 0;
}
然後配置一下執行的專案。
點選執行,檢視結果,會報錯:
然後,把這行#include"pch.h"程式碼刪了
然後執行,執行成功。
由於本人不是主修c++的,有問題的,還請提出來,如確實如此,本人樂意接受。