當前我正在寫一個cpp-DLL。 Afaik如果另一個cpp程序想要使用它們,我必須將這些函數放入一個類和一個命名空間中。但我也想用Labview來使用DLL。如果Labview是免費的,Labview僅識別這些功能,例如既不在名稱空間中,也不在類中。我如何在我的DLL中實現這個?目前,我已經設置了一個#define變量。如果設置了這個變量,函數被封裝在一個命名空間和一個類中,如果沒有,那麼它們是免費的,但我必須編譯整個事情兩次,我得到兩個單獨的DLL文件。那麼,如果我只需要兩個應用程序的一個DLL文件,我該怎麼辦? (請不要告訴我兩次寫這些函數,管理費用更糟,我之前已經嘗試過)。 或者我不必在不使用名稱空間時通過LoadLibrary()調用DLL?
非常感謝!爲cpp創建一個沒有命名空間的dll
回答
Afaik如果另一個cpp程序想要使用它們,我必須將這些函數放到一個類和一個命名空間中。
這顯然是錯誤的。你根本不需要這樣做。相反,DLL最初是作爲C函數的庫引入的。 C++使用重名名稱來表示命名空間/類和參數類型。這方面沒有標準。不同的編譯器使用他們自己的方案。
總結:
- 如果您從DLL導出簡單的C函數,這將始終工作。
- 如果您從命名空間導出類或其他東西,如果使用相同版本的 編譯器編譯了其他.exe/.dll,則 肯定會起作用。如果不是 - 這取決於。
關於LoadLibrary
:它應該被用來當你不知道該DLL的名稱,或在此DLL中的函數前面的名字,或當你不想在你的進程開始加載這個DLL 。否則(簡單情況下)將您的可執行文件與該DLL的implib鏈接起來。這完美適用於簡單的c函數。由於某些原因,直接鏈接不好時應使用LoadLibrary
。
從DLL中導出C++類非常不穩定。一般來說,只有當你保證它能夠工作的時候,你並不需要它(使用靜態庫或只是將源文件添加到項目中)。 http://stackoverflow.com/questions/12314101/creating-c-dll-without-static-methods/12314276#12314276 – tenfour
這是當你使用LoadLibrary:1.你想要的選項不加載DLL,或2。你無法保證它在圖書館搜索路徑上的存在。 –
- 1. 動態創建一個沒有命名空間的類
- 2. 創建包含許多命名空間一個dll
- 3. 哪個DLL具有Windows.Devices.Gelocation命名空間?
- 4. 沒有名爲命名空間「STD」 make_unique'
- 5. C#讓所有的命名空間從一個.dll
- 6. 它是否有可能改變一個dll的命名空間?
- 7. 命名空間'Eigen''索引'沒有命名一個類型
- 8. C++:有沒有辦法創建模板命名空間?
- 9. 如何在所有命名空間中創建一個類型?
- 10. 創建另一個Clojure命名空間的別名
- 11. 超過命名空間中一個枚舉:類型或命名空間「性別」沒有命名空間
- 12. NoReverseMatch沒有命名空間
- 13. ::沒有命名空間
- 14. 沒有命名空間
- 15. 沒有命名空間
- 16. Microsoft.Reporting沒有命名空間
- 17. 沒有命名空間
- 18. XElement.Descendants沒有命名空間
- 19. 爲什麼沒有Microsoft.Win64命名空間?
- 20. 沒有命名空間的Groovy XMLSlurper命名空間錯誤
- 21. 從不同命名空間內創建命名空間資源
- 22. 如何爲doxygen中的一個命名空間及其子命名空間創建單獨的選項卡?
- 23. 沒有命名空間聲明創建XML元素
- 24. 無法在VS2013中創建測試,沒有Microsoft.VisualStudio.TestTools.UnitTesting命名空間
- 25. 如何創建一個包含多個命名空間類型
- 26. 添加默認的命名空間時會創建一個類
- 27. 如何創建一個從變量的類命名空間
- 28. 在命名空間內創建一個新的對象javascript
- 29. 從一個命名空間擴展的未命名空間類
- 30. 反序列化XML命名空間沒有,但一類期待命名空間
您不需要使用類或名稱空間,以使您的DLL可用於其他C++項目。你從哪裏得到這個想法?你應該做的是無條件地將DLL函數作爲自由函數導出,然後爲C++編譯器提供一個單獨的包裝類(如果需要的話)。你只需要1個DLL(除非你正在編譯32位和64位)。 –
http://msdn.microsoft.com/de-de/library/ms235636.aspx從這裏 –
@arc_lupus這解釋瞭如何將**類**添加到.dll。如果你不需要課堂,請不要添加課程。只需使用'extern「C」'輸出符號。另請閱讀[導出用於C或C++語言可執行文件的C函數](http://msdn.microsoft.com/zh-cn/library/ys435b3s.aspx)。 – IInspectable