我已經繼承了一個C++項目,並且需要將它轉換爲DLL,才能在其他項目中使用它。如何使用Visual Studio 2010中的DEF文件從現有的C++代碼生成DLL
該代碼是在Visual Studio 2010解決方案中構建的。我能夠編譯它並生成一個DLL文件,但沒有關聯的lib文件。我不是一個Windows 8開發者,但目前看來,我需要出口,我想使用的功能,有兩種方式:
第一個選擇意味着在我想導出的每個類或函數前面手動添加__declspec(ddlexport)。由於有很多類,而且我沒有控制所有將與庫鏈接的應用程序,所以第二個選項(DEF文件)看起來更有希望。
有沒有什麼辦法從現有的DLL文件生成一個DEF文件?我試過不同的解決方案:
- 使用expdef。它只是在沒有任何信息的情況下崩潰。
使用dumpbin。我沒有看到函數名稱。就在:
文件類型:DLL
摘要
1000 .data 2000 .idata 18000 .rdata 5000 .reloc 1000 .rsrc 98000 .text 48000 .textbss
罷了。我想這意味着我不會輸出任何東西。但是,這正是我想要做的。我該怎麼做?
也許這可以幫助你: http://stackoverflow.com/questions/ 14402415/export-function-from-dll-in-visual-studio-2010-using-def – Matz
第一份工作是避免導出* everything *。一個DLL的公共接口需要被設計*,這不是一種將屬性代碼化的隨機行爲。如果您確實需要導出C++類,請注意這樣做的相當大的危險,那麼您非常希望使用__declspec(dllexport)。用DEF文件做這件事是殘忍和不尋常的懲罰,一定會出錯。 –
對不起,我的啞巴級問題。當我聲明一個類時,我有一些公共屬性和方法。到現在爲止還挺好。現在,假設我們有100個課程。每個班級都有自己的公共屬性和成員。在我的(可能是天真的)方法中,我只想將代碼打包到一個庫(一個DLL文件)中,讓其他程序只調用每個類的公共接口。所以,如果我使用「public」來定義這個接口,爲什麼我需要另一種機制來說明哪些部分必須被視爲公共的並且被暴露以被調用? – jorgeas80