dll的問題總匯

2021-05-27 01:20:20 字數 1051 閱讀 2726

dll 檔案可以匯入變數,函式,和c++類,但是匯入變數會使執行程式與dll緊耦合,而c++類匯入則需要兩個檔案的開發商所用的編譯器相相容,所以做好只匯入函式;

建立dll :

標頭檔案:

#ifdef               mylibapi                    //在dll原始檔中必須定義這個巨集為匯出巨集

#else                    //因為執行檔案中必然沒有定義這個巨集所以

#define mylibapi   __declspec(dllimport) //在執行檔案中必定為匯入巨集

#endif

mylibapi int g_nresult;                        //匯入變數

mylibapi int add(int nleft, int nright);  //匯入函式

原始檔:

#include

#define mylibapi   __declspec(dllexport)    //遮蔽掉標頭檔案的匯入巨集為匯出巨集

#include "mylib.h"

int g_nresult;

int add(int nleft, int nright)

其中的 extern "c" 的作用是告訴c++編譯器 不要改動所要匯出的型別的名稱,以防在別的模組中無法訪問; (當在寫c和c++的混合**的時候,如果不加則會導致嚴重的鏈結問題)

當你用c++編譯器寫的dll,再用c語言的編譯器來匯入就會出錯,而還是用同一種編譯器便宜的話則不會出錯;

可以通過dumpbin.exe 來檢視所謂匯出或者需要匯入的dll 的資訊;(exports /imports)

名字改編: 為了支援過載,按照自己的一套規則來改變函式的名字

這就導致了,要就要在客戶端,和服務端同時用extern "c" 來用相同的規則來尋找同乙個函式名;(要不就不要加)(用這個特性的話就不可以匯出類函式;)

如果在dll檔案中分配記憶體的話,那麼一定要提供相應的釋放函式在dll中釋放記憶體,即乙個模組提供了分配記憶體的函式,那麼它就同時也要提供釋放記憶體的函式.

git 相關問題 總匯

最近在使用android的repo和git的過程中遇到了很多莫名奇妙的問題,現在記錄一下,便於自己以後的查用。1.repo sync中遇到error checkout 接一串hashnumber 解決方法 進到它說提示的目錄中,用git status顯示檔案,將修改過的檔案刪除掉,再重新repo s...

WCF小問題總匯

1.q wcf服務有沒有建構函式或者靜態建構函式?a 都不可用 2.q wcf中如何使用全域性變數?a 用session繫結,或者靜態變數 3.q wcf在wpf一直報xaml錯誤 a 不要把new客戶端放在wpf建構函式中,應該放在onloaded事件或別的地方。4.傳入引數可以是自定義型別,但返...

事務不生效問題總匯

1,在同乙個service中使用 this.方法的事務不生效 原因 spring中事務管理是使用aop 技術實現的,目標物件自身並沒有事務管理功能的,而是通過 物件動態增強功能對事務進行增強的。因此當我們在同乙個service類中通過乙個方法呼叫另乙個方法時,是通過目標物件this物件呼叫的,目標物...