實現此目的的最佳方法是什麼?我有一個在C#windows服務中生成的文件名列表。我需要最終讓他們進入STL集合,並將其推送到一個文件映射。我假設實際上在C#中創建這個結構要麼是禁止的,要麼是太難以勝任,但是我可以使用本機dll,它返回一個指向它創建的集合的指針,然後我將它傳遞給filemapping?這裏的任何想法都會有所幫助!在C#中創建一個STL std :: set,並將其命名爲C++
3
A
回答
5
在C#中創建一個std::set
並不實際。然而,可以通過PInvoke將這些名稱集合傳遞給C,並將它們放到那裏的std::set
。
extern "C" {
void PassNames(const wchar** ppNames, int nameCount) {
std:set<std::string> nameSet;
for (int i = 0; i < nameCount; i++) {
nameSet.insert(ppNames[i]);
}
PassOfTheSet(nameSet);
}
}
然後,你可以使用的PInvoke調用從C#這個功能,因此傳遞數據的原生
[DllImport("TheDllName.dll")
public static extern void PassNames(string[] names, int nameCount);
+0
由於某些特殊需要,我最終需要走另一個方向,但這是一個很好的答案。 –
相關問題
- 1. C++ STL「Association Set/Map」
- 2. 在c#exe中創建命名互斥並在C++中訪問它一個dll
- 3. 將std :: map複製到C++的std :: set
- 4. 創建一個新的Excel工作表並將其命名
- 5. C++ - 爲std :: array迭代器創建一個std ::數組的別名
- 6. 將兩個或多個C++命名空間合併爲一個
- 7. openssl在C中創建rsa密鑰對並將其導出
- 8. 如何在C++ 11(STL)中創建一個拉伸兩個元組的函數?
- 9. C++ STL map,std :: pair作爲密鑰
- 10. 如何在C#中創建一個RichTextBox並測量其大小?
- 11. 批處理:創建一個文件夾並將其命名爲今日日期
- 12. C++庫創建使用命名空間
- 13. C++ std :: set upper_bound迭代器行爲
- 14. C++ std :: set插入索引
- 15. Visual C++ 2010 std :: set find broken
- 16. libC++ - 將std重命名爲std :: __ 1?
- 17. 創建新工作表並將其重命名爲循環
- 18. 在C#中創建一個文件並將其作爲一個IntPtr傳遞給一個COM對象
- 19. C++ STL Set:無法找到()插入的最後一個元素
- 20. C++ std :: set ::使用std :: remove_if擦除::
- 21. 在C++中創建一個byte [] [],並使用JNI將其返回給Java
- 22. STL相關seg錯誤在C++ std :: string?
- 23. 在C中,可以創建一個名爲Main()的函數嗎?
- 24. std :: back_inserter爲std :: set?
- 25. 對於std :: list,在C++ STL(std :: unordered_set)中沒有散列函數?
- 26. 在C++中創建一個通用鏈接列表,不需要stl
- 27. C#檢查excel文件的WorkSheet名稱並將其重命名
- 28. C#創建一個致命的異常?
- 29. C++創建std :: packaged_task的通用std :: bind
- 30. 在C中創建一個DLL,並從一個C++項目中鏈接它
一個'的std :: set'可能包含指向這將是任何完全無效上下文不是創建它的程序。我不認爲將它寫入文件映射是可能的,即使你有一些可以在C#中模擬它的奇蹟庫。我想你過早地接受了你之前提出的問題的答案。 –
是的,我的閱讀讓我得出了同樣的結論。我仍然認爲最後一篇文章的答案是可以接受的,因爲它回答了我的直接問題,並且適用於非互操作場景,但這很可能會引起誤解。 –
「我需要最終讓他們進入STL集,並將其推送到文件圖」 您是否確定這是您所需要的?文件映射(或者,據我所知,內存映射文件)並不反映堆的狀態,但std :: set中的對象將在堆上,而不在內存映射文件的(共享)地址空間中。 我想應該使用一些或多或少的專有API來代替構建相關結構或將其傳遞給流程。 – bronekk