問題タブ [managed]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
618 参照

c++ - プロセス ホップ中に非管理対象から管理対象に変換する

まず、この投稿について Matt Davis に感謝します。投稿がその特定の質問に対する回答として選択されていないことは知っていますが、投稿は私にとって非常に役に立ちました. いくつかの小さな問題を修正する必要がありました (主に、彼が提供したコードのファイルパスを調整することでした) が、彼の C++ ブリッジ メソッドを使用して、C# WCF サービス用のアンマネージ C++ クライアントを簡単に作成できました。

私は現在、そこに示されている基本的な概念を改善する方法を模索しています。以下は、Matt の投稿にある HelloServiceClientBridge.cpp ファイルのコードの一部です。

ここで文字列のコピーが大量に作成されるようです。文字列のコピーが作成される可能性のあるすべての場所を次に示します。

  • name変数内の文字列の元のアンマネージド コピー
  • gcnew String(name)が呼び出されたときの文字列のマネージド コピー
  • わかりませんが、マネージド文字列がパラメーターとしてSayHello()メソッドに渡されると、別のコピーが作成される可能性があります
  • 文字列は、C# サービスに送信される WCF メッセージにコピーされます。
  • よくわかりませんが、メッセージを受信したときに C# サービスによって別のコピーが作成される可能性があります
  • String.Formatが呼び出されると、文字列の別のコピーが作成されると思います
  • 新しい "Hello" 文字列は、クライアントに送信される WCF メッセージにコピーされます
  • よくわかりませんが、メッセージを受信したときに C# クライアントによって別のコピーが作成される可能性があります
  • よくわかりませんが、C# クライアントが文字列を C++ ブリッジに返すときに、別のコピーが作成される可能性があります。
  • Marshal::StringToHGlobalAnsi(message)が呼び出されると、新しい文字列のアンマネージド コピーが作成されます。
  • よくわかりませんが、文字列がstd::string

アンマネージドおよびマネージドの相互運用性とプロセス間通信を使用している場合、一部のコピーは避けられないことに気付きましたが、このコピーの一部を回避できるかどうか疑問に思っています。単純な HelloWorld 型の例では大したことではありませんが、大量のデータが渡される場合、アンマネージドからマネージドにコピーし、さらにあるプロセスから別のプロセスにコピーするコストは非常に大きくなる可能性があります。したがって、プロセス間通信が行われているのと同時に、管理されていないものから管理されているものへ、および/またはその逆へのマーシャリングを行う方法があるかどうか疑問に思っています。

私が考えた 1 つの可能性は、コードを変更して、アンマネージ文字列からマネージ文字列としてフォーマットされた WCF メッセージに文字列を直接コピーできるようにすることでした。どうせその時点でコピーを作らなければならないので、そのコピーが以前のコピーの機能を兼ねていれば一石二鳥だと思いました。

私が考えたもう 1 つの可能性は、WCF メッセージを介して C++ プロセスから C# サービスにアンマネージド ポインターを渡すことでした。これは、C# サービスによってマネージド文字列にマーシャリングされます。もちろん、これは、メモリの割り当てとそのポインタのメモリの割り当て解除の責任者を特定するのがかなり面倒になる可能性がありますが、コピーが削減され、WCF メッセージのサイズが大幅に削減される可能性があります。

アイデアをお寄せいただきありがとうございます。

0 投票する
4 に答える
13855 参照

java - JSFマネージドBeanの自動作成?

JSF マネージド Bean を自動的に作成することは可能ですか?

たとえば、いくつかのセッション スコープ Bean があります。これらのインスタンスに (JSF だけでなく) コードでアクセスすることが必要になる場合があります。これは、次の方法で行います。

ただし、「#{pages}」を呼び出すページがまだアクセスされていない場合、これはnullに解決されます...スコープの「開始」時にJSFにBeanを作成させる方法はありますか? この場合、理想的には、ユーザー セッションが開始されたときに「ページ」Bean がセッションですぐにインスタンス化されるのでしょうか?

0 投票する
1 に答える
1274 参照

c# - C#でマネージストリームをuint配列に直接読み込む方法は?

実際には uint 形式のストリームにデータがあります。System.IO.Stream では、コンテンツをバイト配列に読み取ることしかできませんが、バイトを読み取ってからバイト配列の長さの 1/4 の uint 配列に変換したくありません。時間を節約するために、uint 配列のメモリに直接読み込みたいと思います。

アンマネージ C++ の場合は、とても簡単です。ポインターを uint 配列に送信するだけで完了します。しかし、C# ではそれほど単純ではないようです。別の uint 配列と同じメモリ アドレスを持つバイト配列を生成し、そのバイト配列を Stream.Read() のパラメーターとして送信して、Stream.Read() がバイト配列に書き込むときにコンテンツがちょうどuint配列でも。しかし、私は Marshall クラスを調べましたが、これまでのところ、この問題の解決策は見つかりませんでした。何か案は?

0 投票する
1 に答える
3285 参照

string - 共有メモリと文字列: 管理されていますか?

boost::interprocess::string共有メモリに 問題があります。

を使用するshared_memory_objectと、さまざまなフィールドを持つ構造体を操作できますが、文字列 (セグメンテーション エラーが発生します)。
反対に、私が使用するときは、managed_shared_memoryすべて問題ありません。

私は何か間違ったことをしていますか?を使用するとパフォーマンスが低下するかどうか知っていますmanaged_shared_memoryか?

ありがとうございました!

0 投票する
1 に答える
625 参照

c# - マネージ コードを介して dll から他の dll の別のアンマネージ関数にアンマネージ関数ポインタを送信する方法は?

私はこの問題を抱えており、すでにしばらくの間対処しています。最初に、アンマネージ コード (たとえば、dll_1、dll_2) を含む 2 つの dll と、C# でのマネージ アプリケーションがあります。私がすべきことは、マネージ コードで dll_1 のアンマネージ関数へのポインターを取得し、それを構造体にパックして、この構造体を引数として dll_2 のアンマネージ関数に送信することです。多分前にそのような問題に対処した人はいますか?

0 投票する
2 に答える
1698 参照

c# - 異なる言語文字列を単一のリソース ファイルに追加する

リソース (.resx) ファイルを含む小さなアプリケーションがあります。

このファイルには、別のアプリケーションで使用されるアイコンと文字列が含まれています。アイコンはボタンに表示され、文字列はマウスオーバー テキストです。

私が望むのは、何らかの方法で、追加の .resx ファイルを作成することなく、複数の言語で文字列を追加することです。

これを行う方法はありますか?

アプリケーションを C# で作成していますが、それを .Net 環境に保持し、リソースを管理したいと考えています。

どんな助けでも大歓迎です-前もって感謝します。

0 投票する
1 に答える
3751 参照

.net - Windows API 機能の .NET ラッパー

.NET フレームワーク自体では利用できない Windows API 機能の .NET マネージ ラッパーを知っている人はいますか?

ウィンドウの作成と表示スタイル、一般的な UI コントロール操作、キーボード/マウス入力、ファイルとディスクの情報、メモリ マップされたファイルなどの領域

私は定期的にhttp://www.pinvoke.net/にアクセスしており、素晴らしいリソースを見つけています。ただし、関数の DllImport を直接使用して、必要な構造と列挙を毎回見つける必要があると、時間がかかり、エラーが発生しやすくなります。

(可能であれば 100% マネージ コードで処理することが、ほとんどの場合、より良いアプローチであることは認識していますが、特に Windows フォームでは、マネージ コードだけでは実行できないことが多くあります。)

今のところ Windows XP に焦点を当てていますが、将来的には Windows 7 に移行する可能性があります。

0 投票する
6 に答える
1069 参照

c# - c++ auto_ptr はマネージ ポインター (Java、C#...) とどのように関連していますか?

私は管理された世界から来て、C ++の自動メモリ管理は私にとって非常に不明確です

私の理解が正しければ、ポインタをスタック オブジェクト内にカプセル化し、auto_ptr が範囲外になると、指定されたオブジェクトに対して自動的に削除を呼び出しますか?

どのような使い方をすればよいのでしょうか? また、C++ 固有の問題を自然に回避するにはどうすればよいでしょうか?

0 投票する
1 に答える
420 参照

c# - アンマネージ コードからの COM オブジェクトの取得

COM IUnknown ベースのオブジェクトへのポインターを返すアンマネージ C ルーチンをエクスポートするライブラリがあります。DLL は登録されておらず、サーバーではありません。C# の COM 型を使用したいと考えています。

COM 型の C# インターフェイスは既に作成しています。LoadLibrary() と GetProcAddress() の呼び出しに相当する C# は何ですか? GetProcAddress() の結果を呼び出してから、それを呼び出して COM インターフェイス ポインターをロードするにはどうすればよいでしょうか?

これは、私が何を求めているかを示す C++ のスニペットです。

私の直感は「C++/CLI で実行してください」と言いますが、ジェネリック型に対してこれを行う方法と、[Guid] 属性を使用して宣言するマネージャー ポインター型に未加工の IUnknown ポインターを強制する方法がわかりません。管理されたインターフェイスで。

0 投票する
4 に答える
38051 参照

c# - 管理されていない DLL から .net アプリへのコールバック インターフェイスを実装する方法は?

私の次のプロジェクトでは、C++ の既存のコードに GUI を実装したいと考えています。私の計画は、C++ 部分を DLL でラップし、GUI を C# で実装することです。私の問題は、アンマネージド DLL からマネージド C# コードにコールバックを実装する方法がわからないことです。私は既に C# でいくつかの開発を行っていますが、マネージ コードとアンマネージ コードの間のインターフェイスは初めてです。ヒントや読書のヒント、または簡単な例を教えてもらえますか? 残念ながら、役立つものは何も見つかりませんでした。