c DLL匯出類和匯出函式

2021-09-24 22:41:37 字數 1227 閱讀 6139

一、匯出函式

背景:匯出函式: 在dll中有一張匯出表,其中有一系列函式,這些函式叫做匯出函式。這些函式可供外部程式呼叫,即這些函式都是該dll的入口點(類似main函式)。不在匯出表中的函式,為該dll私有的函式,外部程式不能呼叫它們。

1、沒有__declspec(dllexport),將生成的測試lib庫新增到專案中,直接呼叫,會報錯:

lnk2019	無法解析的外部符號 "void __cdecl test(void)" (?test@@yaxxz),該符號在函式 main 中被引用

lnk1120 1 個無法解析的外部命令

2、正確寫法:.**件

#ifdef testdllexport

#define dllexport __declspec(dllexport)

#else

#define dllexport __declspec(dllimport)

#endif

#ifdef __cplusplus

extern "c"

#endif

二、匯出類

只需要在class後加上_declspec(dllexport)即可實現匯出類。

1、與匯出函式類似,不加_declspec,會報錯lnk2019

2、正確寫法:.**件

#pragma once

class _declspec(dllexport) exportclass

;

.cpp檔案

#include "exportclass.h"

#include using namespace std;

exportclass::exportclass(int a)

exportclass::~exportclass()

void exportclass::testexportclass()

測試程式

#include "exportfun.h"

#include "exportclass.h"

#include int main()

輸出結果:

C DLL匯出函式

有兩種方式,一是寫def檔案,二是用 declspec dllexport 修飾。相對來說,我更喜歡用後一種方式,這樣不用多寫乙個檔案。如果呼叫dll的 也是c 的,可能這樣寫沒有什麼問題,但是delphi程式呼叫的話就有問題了,c 編譯器把函式修飾名給修改了,用depends檢視dll的話能看到原...

C DLL 建立例項 匯出類和函式

起初直接把子 declspec dllexport 放在類宣告的地方.發生 warning c4273 dll 鏈結不一致錯誤.想了挺長時間才意識到是生成lib時並標頭檔案和原檔案中對函式的名字解析名字不一樣而產生的.才想到要定義乙個巨集.有點感嘆知識不用會也會老的.下邊是 標頭檔案 testcla...

C DLL 匯出函式名

10 05 1844292.html 經常使用vc6的dependency檢視dll匯出函式的名字,會發現有dll匯出函式的名字有時大不相同,導致不同的原因大多是和編譯dll時候指定dll匯出函式的界定符有關係。vc 支援兩種語言 即c c 這也是造成dll匯出函式差異的根源 我們用vs2008新建...