2011-12-20 238 views
4

我不知道如何做到以下幾點:如何在VC++ 6.0項目中使用DLL而不需要.h和.lib文件?

  • 我使用微軟的Visual C++ 6.0
  • 我有一個Win32 DLL項目,該項目是編譯。
  • 我有另一個項目,此時它通過包括它使用 DLL中的Win32控制檯項目的頭文件和鏈接的 DLL中的.lib文件。

現在我想要另一個項目,類似於第二個BUT而不使用頭文件和lib文件。

這可能嗎?我讀到的每個地方都需要dll + lib + h或dll + h。如果認爲如果你知道接口,一個DLL文件就足夠了?

順便說一句,通過「使用DLL」我的意思是,利用在DLL中定義的類和函數。

+1

爲什麼你不想使用標題? – Mat

+2

如果沒有聲明它們,你會如何「知道接口」?這通常在頭文件中。 .lib文件可幫助鏈接器找出需要使用的DLL。你可以使用LoadLibrary + GetProcAddress來實現它。 –

+0

@Jane - 我會想象其他Win32 DLL項目,你認爲沒有.h或.lib實際上確實有它們。否則,您將需要自己查找函數和類簽名(我怎麼樣,我不知道)。我懷疑徹底調查項目屬性會揭示「缺失」聲明(lib或標題)。 – Dennis

回答

4

這是可能的,如果你只是簡單的「外部C」功能。如果是這種情況,這種方法可能是用LoadLibrary加載DLL,然後用GetProcAddress導入每個函數,當然你需要知道函數簽名來創建一個正確聲明的函數指針。幾乎不可能使用每個相反的類。

+2

我想你可以使用類,如果你有一個工廠函數,你可以在DLL中調用。有一個簡單的C函數,它創建並返回一個指向所需類實例的指針。然後加載該庫,並在該工廠函數上使用GetProcAddress並調用它來獲取該類。實際上,你只能在DLL中使用1個函數,它爲你提供了一個用於所有其他交互的根對象。 – Nerdtron

+0

@Nerdtron是同意的,但是必須根據該策略創建dll。 –

0

如果您的DLL包含類,它很有可能是一個COM組件。

如果是這種情況,#import指令(如#include使用的那樣)將生成一些包含接口詳細信息的臨時包含文件。你應該使用COM來訪問你的對象。否則,如果您使用C++類具有「普通」DLL,那麼可以使用鏈接器訪問導出的符號:指示它轉儲映射(請參閱here),以瞭解重新命名的名稱。但我不認爲有可能手動構建接口...

相關問題