做dll時是否可以不要def檔案?

2021-04-14 00:29:06 字數 729 閱讀 2278

在vc++中,如果生成dll可以不使用.def檔案。你只需要在vc++的函式定義前要加__declspec(dllexport)修飾就可以了。但是使用__declspec(dllexport)和使用.def檔案是有區別的。如果你的dll是提供給vc++使用者使用的,你只需要把編譯dll時產生的.lib提供給使用者,它可以很輕鬆地呼叫你的dll。但是如果你的dll是供vb、pb、delphi使用者使用的,那麼會產生乙個小麻煩。因為vc++對於__declspec(dllexport)宣告的函式會進行名稱轉換,如下面的函式:

__declspec(dllexport) int __stdcall iswinnt()

會轉換為iswinnt@0,這樣你在vb中必須這樣宣告:

declare function iswinnt lib "my.dll" alias "iswinnt@0" () as long

@的後面的數由於引數型別不同而可能不同。這顯然不太方便。所以如果要想避免這種轉換,就要使用.def檔案方式。

exports後面的數可以不給,系統會自動分配乙個數。對於vb、pb、delphi使用者,通常使用按名稱進行呼叫的方式,這個數關係不大,但是對於使用.lib鏈結的vc程式來說,不是按名稱進行呼叫,而是按照這個數進行呼叫的,所以最好給出。

c#在對dll進行呼叫的時候,與vb,pb,delphi使用者呼叫dll的方式相同,需要有def檔案來制定匯出的介面,這樣c#才能夠認得到所要匯出的介面,沒有def檔案的dll檔案在c#中不能被呼叫。

VB也可以做標準dll了

vb中建立的dll只是com元件,無法作為輸出函式的dll,其實這只是個錯誤的說法。其實ms非常狡猾,如果你是個vb瘋狂發燒友的話,應該早就狂試出這種可以建立輸出函式的dll的方法。vb 編譯檔案實際上採取了兩次編譯的方法,首先是呼叫c2.exe產生 obj檔案,然後呼叫link.exe連線。如果在...

乙個技術員是否可以做兼職

我做了乙個兼職,但是有人認為這樣不可以,有點煩 但是我做的這樣可以了解一下我們的大好河山呀,應該可以吧,請大家給一些意見 你想找個伴一同旅行嗎?到豬行天下旅遊網來吧 發表你的旅遊資訊,說不定,你還能找到一身的伴侶。你對世界文化遺產感興趣嗎?來這兒看看吧 邊上網邊兼職,你所做的只是複製 貼上。快來吧 ...

IT人士在離職時可以做的14件事情

據國外 報道,it人士在離職時可以做14件事情,其中包括 給你的前任老闆寫封感謝信 這樣不僅不會對任何人造成傷害,還可能得到老闆的熱情推薦。以下向大家列出這14件事情 1 參與開源專案 開源專案能為it人士提供最有趣的和有影響力的產品開發場所,更重要的是,這些專案一般都和某些公司有著緊密的聯絡,如果...