これを達成する最も良い方法は何でしょうか?私はC#のWindowsサービスで生成されたファイル名のリストを持っています。私は最終的にそれらをSTLセットに入れ、それをファイルマッピングにプッシュする必要があります。私は実際には、C#でこの構造を作成することは禁止されているか、あまりにも価値があるのは難しいと思っていますが、作成したセットへのポインタを返すネイティブdllを使用できますか?ここの考えは役に立ちます!C#でSTL std :: setを作成し、C++にマーシャリングする
3
A
答えて
5
std::set
をC#で作成することは、実際的ではありません。しかし、名前の集合を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++ - Set on(STLから)
- 2. std :: mapをstd :: setをC++にコピー
- 3. std :: set構造体の作成方法
- 4. C++ STLマップ、キーとしてのstd :: pair
- 5. C++のstd :: setはスレッドセーフですか?
- 6. 埋め込みモノ:C#でのC#構造体の作成/マーシャリング
- 7. マーシャリングC C#
- 8. C++ STL List/Setのクエリを返すのは何ですか?
- 9. Help C#でC関数をマーシャリングする
- 10. SetupGetInfInformationをC++からC#にマーシャリングする
- 11. stlを使わないでC++で汎用リンクリストを作成
- 12. Visual C++ 2010 std :: set find壊れた
- 13. inspect C++ std :: set with VDBode with LLDB
- 14. C++ std :: set Find関数オーバーロード==演算子
- 15. C++からC#マーシャリング
- 16. C++:STL multimap.equal_range()
- 17. C++ std :: setのメンバをインデックスで取得する
- 18. C++ stl stringstreamダイレクトバッファアクセス
- 19. C#でIntPtrにCodeElementsをマーシャリングする
- 20. C++でset(std :: map <string、std :: set < string>>)のマップを反復処理する方法は?
- 21. C++テンプレートSTLコンテナ
- 22. C++ STL; STLコンテナを含むクラスを反復するか?
- 23. C++ STLベクトルディープイレース
- 24. C++でSTLクラスを反復する11
- 25. C#からC++へのマーシャリング
- 26. C++ STLリンクリスト
- 27. std :: setの代わりにstd :: unordered_setを使用する場合
- 28. std :: set(C++)を反復する際の問題
- 29. C++ STLベクトル
- 30. C++でstd :: complexで複素数無限を作成する
'のstd :: set'にデータを渡すことはいずれにも完全に無効になり、ポインタが含まれている可能性がありますそれを作成したプログラム以外のコンテキスト。私はC#でそれをシミュレートすることができるいくつかの奇跡のライブラリを持っていたとしても、それをファイルマッピングに書くことは可能ではないと思います。以前の質問に対する答えを早めに受け入れたと思います。 –
ええ、私の読書は私を同じ結論に導いています。私はまだ最後の投稿への答えは受け入れられると思うが、それは私の直接の質問に答えるもので、非相互シナリオにも当てはまるだろうが、それは誤解を招く恐れがある。 –
「最終的にそれらをSTLセットに入れて、ファイルマッピングにプッシュする必要があります」 本当に必要なのは確実ですか?ファイルマップ(または、私が理解しているように、メモリマップされたファイル)はヒープの状態を反映しませんが、std :: setのオブジェクトはメモリマップされたファイルの(共有)アドレス空間ではなくヒープ上にあります。 私は、関連する構造を構築するか、プロセスに渡すために代わりに使用する必要がある多かれ少なかれ独自のAPIがあると思います。 – bronekk