2014-04-29 12 views
0

我想包括使用C++的使用DLL的方法。使用DLL的類的方法

我一直在努力,包括使用此代碼的DLL:

HMODULE DLL = LoadLibrary(_T("name.dll")); 

     if (DLL) 
     { 
      std::cout << "DLL loaded!" << std::endl; 


      if (_pdisconnect) 
      { 
       std::cout << "Successful link to function in DLL!" << std::endl; 
      } 

      else 
      { 
       std::cout << "Unable to link to function in DLL!" << std::endl; 
      } 
     } 
     else 
     { 
      std::cout << "DLL failed to load!" << std::endl; 
     } 
    FreeLibrary(DLL); 

這是我想包括DLL有兩類PClsTPClsPCls有一個我想包括的方法是getOP(LONG a)。請問如何使用這種方法?

非常感謝!

+0

如果你不能導出類​​本身,你沒有實例在哪裏使用這些函數(假設非靜態函數)。 –

+0

@Marco,你的意思是我需要爲每個類導出一個DLL嗎? – user3508865

+0

不,我的意思是說,一個非靜態成員函數是可用的,它需要它所屬類的一個對象。如果您無法導入該對象,則不能使用該函數 –

回答

2

問題是你不能從DLL導入類,只能導入函數。但是,您可以在DLL中創建實例並返回一個指針(或者傳入對其初始化的工廠函數的引用)的工廠函數。

獲取指向您使用GetProcAddress的函數的指針。但請注意,您必須將該功能的mangled name傳遞給它。

+0

值得注意的是,嘗試使用'GetProcAddress'一個錯誤的函數名是[不一定是個好主意](http://stackoverflow.com/questions/23314750/find-name-mangled-function-in-dynamically-loaded-dll) 。 – computerfreaker

+0

爲什麼這是個壞主意? – Arkady

+0

@JoachimPileborg,請您爲了更好的理解完成代碼? – user3508865