我可以使用LoadLibrary方法來導入類型爲struct的數據? 請原諒我的英文。 謝謝。在C++上使用帶有LoadLibrary()方法的庫dll
回答
嗯......恐怕這個問題有點難以理解。
在C++中,結構聲明就是這樣一個聲明。它不會生成您可以在運行時加載的內容,這是一種純粹的編譯時構造,它告訴編譯器內存中如何佈置內容,涉及的字段,類型和順序等。
我假設你正在使用VC++ 2005
MS現在爲您提供Delay Loading Dll's。
Visual C++鏈接器現在支持DLL的延遲加載。這免除您的需要使用Windows SDK函數LoadLibrary和GetProcAddress來實現DLL延遲加載。
要設置延遲負載的步驟。
轉到到工程 - >屬性 - >連接器 - >輸入,然後指定你的DLL「延遲加載的DLL」
你的意思是數據放在一個DLL,使用LoadLibrary和Getprocaddres獲取一個指針數據?這是可能的,儘管在dll中放置函數更常見,並讓它們返回一個指向數據的指針。
讓我承擔一些事情,在這個問題排除在外:
- 你有一個動態庫調用flubber.dll
- 庫導出功能
bool GetFlubber(Flubber* flubber)
。 - 函數和類型
Flubber
(它恰好是一個struct
!)在名爲flubber.h的頭文件中聲明。
如果這3個條件都滿足,那麼你就可以在flubber.dll,其次是GetProcAddress
與GetFlubber
爲PROC名稱中使用LoadLibrary
,最後你可以通過本地聲明Flubber
實例,並把它傳遞給GetFlubber
檢索到的proc地址。
正如其他答案所表明的,很難說出這裏提出的問題,但我會針對該問題的另一種解釋提出迴應。我不確定它是否「正式支持」,但你可以有一個DLL導出一個全局變量,然後通過GetProcAddress動態訪問它。
例如,如果一個名爲foo.dll的庫包含一個名爲g_MyGlobal的FOO類型的全局變量,那麼它可以將該變量導出到foo.def中。客戶端代碼然後可以調用:
MyPointer = GetProcAddress(..., "g_MyGlobal");
並獲得一個指向全局的「FOO *」指針。
...但有了這個說法,如果你發現自己需要爲私人測試以外的其他目的做這件事,你可能需要重新考慮你的設計。將這個全局隱藏在DLL中的導出函數背後可能會更安全和更乾淨。
- 1. VS2013 - LoadLibrary無法找到dll
- 2. 帶有其他「dll」擴展名的文件的LoadLibrary
- 3. 帶LoadLibrary的STATUS_STACK_BUFFER_OVERRUN
- 4. DLL加載兩次使用調用LoadLibrary
- 5. Android NDK LoadLibrary(「KERNEL32.DLL」)
- 6. 嘗試在Windows上使用LoadLibrary加載DLL時,當依賴DLL丟失
- 7. 在C#中使用DLL庫
- 8. 在一個dll中使用方法的C++ dll
- 9. LoadLibrary ...失敗。缺少dll
- 10. 使用Python從C#庫訪問方法 - Interop .dll文件
- 11. 在C DLL上使用C靜態庫(.lib)
- 12. 從32位進程調用64位DLL上的LoadLibrary
- 13. 調用LoadLibrary( 'user32.dll中')返回14007
- 14. 在沒有第三方庫的情況下使用Java中的C#DLL
- 15. 當LoadLibrary調用DLL時,查找依賴的DLL
- 16. 想要在asp.net中使用C++庫dll
- 17. 帶有使用Python的元組參數的__getitem__方法C-API
- 18. 使用帶有可選參數的方法的C#委託人
- 19. 在沒有lib的C中使用DLL
- 20. LoadLibrary在失蹤DLL上失敗:爲什麼?
- 21. 在帶有/ MTd CRT的本地C++ exe中使用CLI C++ dll與/ MDd CRT
- 22. 調用C DLL中的方法失敗
- 23. 使用帶有drawline()方法的JScrollpane
- 24. 使用.dll文件的方法在C#代碼
- 25. C++ - LoadLibrary返回126錯誤的自制DLL
- 26. 獲取到DLL調用LoadLibrary使用加載路徑( 「MYDLL.DLL」)
- 27. 帶有「隱藏」方法的C#類
- 28. C++/CLI:使用LoadLibrary + GetProcAddress和exe
- 29. 必須使用C++ dll來調用C#.NET方法嗎?
- 30. 在C#中使用C++ dll#
如果他想根據版本和可用性動態加載庫,則仍然必須使用LoadLibrary。 – 2008-12-03 10:28:29