問題タブ [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 に答える
322 参照

.net - UAC と requireAdministrator=True で .NET File.Delete() が失敗するのはなぜですか?

これは私を夢中にさせます。私はStackOverflow全体を検索し、UACについてすべて読みました。しかし、私はまだ問題に直面しています。

VS 2008 を使用して、これだけを行う単純なプログラムを作成しました。

EXE には、requireAdministrator=True の適切なマニフェストがあります。コンパイルすると、アプリ アイコンは盾のアイコンを受け取ります。そして、管理者または標準ユーザーとしてログインしてアプリケーションを起動すると、「次のプログラムで変更を行いますか...」という確認ダイアログが表示されます。さらに、EXE でコード署名証明書を使用します。

アプリを実行すると、次の動作が得られます。

管理者としてログインしてアプリケーションを実行すると、ファイルが削除されます。

ただし、標準ユーザーとしてログインすると、UAC プロンプトが表示されて管理者パスワードを入力しますが、削除を実行すると「ファイル アクセスが拒否されました」というエラーが表示されます。

誰かが私にこれを説明できますか?マニフェストの requiresAdministrator=True がプロセスを昇格させると思いました。しかし、まだシステムファイルを削除できません。

ありがとう。

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

com - アンマネージド C++ からマネージド コード (c#) を呼び出す最良の方法

C# で開発されたオブジェクトのセットで構成される as/w アーキテクチャを開発しました。イベントを多用して、ステータスの変化などをクライアントに通知します。

当初の目的は、レガシ コードが COM 相互運用サービスを通じてこれらのマネージ オブジェクトを使用できるようにすることでした。設計仕様書に書くのは簡単だったのですが、実際に実装するのはもっと難しいと思います。このメソッドを使用したイベント処理の良いサンプルを探して、何時間も検索しました。その道をたどる前に、COM 相互運用がレガシ コードから新しいコードを呼び出せるようにする最善の方法であることを確認したいと思います。

いくつかの異なるオプションがあるようです: 1) COM 相互運用、2) アンマネージ ラッパー クラスの作成、3) /clr コンパイラ スイッチを使用したマネージ オブジェクトの呼び出しの有効化、4) ある種の逆 pInvoke 呼び出しの使用。不足していますか?

それぞれのオプションには利点と欠点があり、どの方法が最善かを考えています。それぞれの具体的な質問/コメントはこちら

COM INTEROP - イベント処理がハードルのようです。パラメータとして変数型を持つイベントを使用します。イベント パラメータには、イベント ID とオブジェクトが含まれる場合があります。イベント ID に基づいて、オブジェクトは特定のタイプになります。これは COM 相互運用機能で処理できますか? 公開されているオブジェクトの多くにはプロパティがあります。インターフェイスでプロパティを宣言することはできないため、すべてのプロパティに対応する get/set メソッドが必要になります。

WRITE UNMANAGED WRAPPER - これは、/clr オプションを使用して DLL を作成し、マネージド オブジェクトの作成と呼び出し、およびアンマネージド オブジェクトの公開を許可することを意味すると思います。これらの管理対象外のクライアントでしょうか。私は前にこれをやったことがありません。これの利点/欠点は何ですか?

/CLR スイッチを使用してください - これが管理対象オブジェクトのサポートを追加することを意味することを理解しています。このアプローチの欠点は何ですか? このオプションは、上記のイベントをサポートしていますか? 「これがマネージ ライブラリです。レガシ コードで /clr コンパイラ オプションを使用して、それを実行しますか?」と言えますか? 私はこれの影響を知りません。これがどのように機能するかの良いサンプルはありますか? (確かにあると思いますが、見つけられませんでした)

REVERSE PINVOKE を使用してください - これがどのように機能するか正確にはわかりませんが、私が見つけた限りでは、これはおそらく有効な解決策ではありません。

では、正しい方向を見つけるための決定木はどのように見えるでしょうか? どんな助けでも大歓迎です。

  • DP
0 投票する
1 に答える
983 参照

c++-cli - C++/CLI 管理スレッドのクリーンアップ

MySQL 組み込みサーバー用のマネージ C++/CLI ライブラリ ラッパーを作成しています。mysql C ライブラリでは、それを使用するすべてのスレッドに対して mysql_thread_init() を呼び出し、それを使用した後に終了する各スレッドに対して mysql_thread_end() を呼び出す必要があります。

特定の VB.Net プロジェクトをデバッグすると、少なくとも 7 つのスレッドが表示されます。VB がワーカー スレッド自体を明示的に作成しない場合、私のライブラリは 1 つのスレッドしか表示しないと思います (それに関する確認はありますか?)。ただし、必要に応じてライブラリのクライアントがワーカー スレッドを作成できるようにする必要があるため、ライブラリはある程度スレッドに対応している必要があります。

私が考えることができる最初のオプションは、クラスでいくつかの「EnterThread()」および「LeaveThread()」メソッドを公開することです。これにより、クライアントコードは最初と DoWork() メソッドを終了する前にそれらを明示的に呼び出します。これは、(1) .Net がユーザーが認識していないスレッドを「魔法のように」作成せず、(2) ユーザーが何らかの try/finally 構造でメソッドを呼び出すように十分注意している場合に機能します。

とはいえ、ユーザーが手動で処理するのはあまり好きではないので、その点について手を差し伸べることはできないかと考えています。純粋な Win32 C/C++ DLL では、DllMain DLL_THREAD_ATTACH および DLL_THREAD_DETACH 疑似イベントがあり、必要に応じて mysql_thread_init() および mysql_thread_end() を呼び出すためにそれらを使用できますが、管理された C++/CLI にはそのようなものはないようですコード。いくらかのパフォーマンスを犠牲にして(それほどではないと思います)、TLSを使用して「新しいスレッドからの使用」のケースを検出できますが、スレッドが終了するケースのメカニズムは想像できません。

そこで、私の質問は次のとおりです。(1) .net は、ユーザーが気付かないうちにアプリケーション スレッドを作成できますか? (2)マネージ C++/CLI から DLL_THREAD_ATTACH / DLL_THREAD_DETACH と同様に使用できるメカニズムはありますか?

前もって感謝します。

0 投票する
3 に答える
1303 参照

c++ - fread スピード マネージド アンマネージド

さて、malloc で割り当てた char 配列にバイナリ ファイルを読み込んでいます。(ちなみに、ここのコードは実際のコードではありません。実演のためにその場で書いただけなので、ここでの間違いはおそらく実際のプログラムの間違いではありません。) このメソッドは毎秒約 5000 万バイトで読み取ります。

主要

read_whole_buffer

私が信じているファイルストリームと関数 ReadByte() を使用してファイル全体をバイト単位で読み取るマネージ C++ で同様のものを作成しました。

また、私のコンピュータには sata と IDE ドライブがあり、両方からファイルを読み込んでいますが、まったく違いはありません (SATA は IDE よりもはるかに高速に読み取ると仮定していたので、これは奇妙です) .)

質問

なぜこれが私にとって意味をなさないのか、皆さんは理解できるかもしれません。私の知る限り、バイトごとに読み取るのではなく、ファイル全体を配列に fread する方がはるかに高速です。その上、テストを通じて、マネージ C++ の方が遅いことがわかりました (ただし、コードのベンチマークを行っていて速度が必要な場合にのみ顕著です)。

それで

なぜ私は両方のアプリケーションで同じ速度で読んでいるのか. また、ファイルから配列への 5000 万バイトは高速ですか?

マザーボードがボトルネックになっているのでしょうか?それはあまり意味がないようです。

ファイルを配列に読み込むためのより高速な方法はありますか?

ありがとう。

私の「スクリプトタイマー」

ミリ秒の分解能で開始時間と終了時間を記録します...最も重要なのは、タイマーではないことです

バッファのことを読む

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

eclipse - プロジェクト用に異なる方法でビルドされたEclipseCDT共有リソースフォルダー

Eclipse cプロジェクトのセットがあり、それらはすべて共通の共有コードベース(同じフォルダー内の.cファイルと.hファイルの混合)を参照しますが、プロジェクトごとに異なる方法でそのコードをビルドします。

共通のコードベースは各プロジェクト内から編集できますが、これらの編集はすべてのプロジェクトで実行される修正になります。共通コードは、定義によるビルドオプションを除いて、プロジェクトごとに分岐しません。

このライブラリのプロジェクトを作成する場合、それは、ライブラリのビルドが必要なものではないことを意味します。結果のオブジェクトファイルを、それらが構築されているプロジェクトに配置する必要があります。したがって、ac /c​​++プロジェクトは意味がありません。

共通コードは(各プロジェクトと同様に)Subversionリポジトリにチェックインされます。「新しいフォルダ->リンクされたリソース」を使用することもできますが、開発者がたまたま使用しているディレクトリ構造からプロジェクトを独立させたいと思います。

これを行うためのクリーンな方法はありますか?

ありがとう。

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

arrays - C# -- ポインターからマネージド アレイを作成する

バイト配列から double のマネージ配列を作成しようとしています。現在動作に問題がありますが、最適化したかったのです。ここに私が働きたいいくつかのコードがあります:

これらの問題に対処する方法を教えてください。

-アーロン

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

c# - マネージド (C#) およびアンマネージド (C++) オブジェクトのデストラクタの管理

c++ dll のアンマネージ オブジェクトへの匿名整数ハンドルを保持する ac# dll にマネージ オブジェクトがあります。c++ dll 内では、匿名整数が std::map で使用され、アンマネージ c++ オブジェクトが取得されます。このメカニズムにより、匿名の整数ハンドルを使用して、マネージド オブジェクトとアンマネージド オブジェクトの間の緩やかな関連付けを維持できます。

管理対象オブジェクトの finalize メソッド (デストラクタ) で、管理対象外の dll を呼び出して、管理対象外オブジェクトを削除します。

C# プログラムは問題なく実行されますが、プログラムの終了時に問題が発生します。マネージド側での削除操作の順序を制御できないため、アンマネージド dll はマネージド オブジェクトの前にメモリから削除されます。したがって、管理対象オブジェクトのデストラクタが呼び出されると (次に、管理対象外のデストラクタが [少なくとも間接的に] 呼び出されます)、管理対象外オブジェクトは既に削除されており、プログラムはクラッシュします。

では、ac# プログラムのマネージド オブジェクトに関連付けられている外部 C++ DLL のアンマネージド オブジェクトを安全に削除するにはどうすればよいでしょうか。

ありがとう

アンドリュー

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

c++ - マネージC++からネイティブC++データにアクセスする

大きな静的バッファを利用するネイティブC++ライブラリがあります(デバイスからデータを取得します)。

このバッファが次のように定義されているとしましょう。

ここで、このバッファーの一部をマネージC ++に公開したいと思います。たとえば、1000バイトの新しいデータがライブラリによって格納されている場合、マネージC ++コードへのコールバックを実行し、マネージC++がにアクセスできるようにLargeBuffer[5000]ポインターを渡します。LargeBuffer[5000]そこに1000バイトのデータがあります(可能な場合は直接、つまりデータをコピーせずに、最大のパフォーマンスを実現します)。

マネージC++コードがこのネイティブ配列のデータにアクセスできるようにするための最良の方法は何ですか?

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

visual-studio - 管理されたdllの管理されていない依存関係をVisual Studiosビルドシステムに理解させる方法は?

マネージド コードをビルドするとき、Visual Studio は、参照されているマネージド プロジェクトの dll をビルド中のプロジェクトの出力フォルダーに正しく (そして再帰的に) コピーします。

ただし、これらの参照の 1 つがアンマネージド DLL に依存するマネージド DLL である場合、それらの対応するプロジェクトが同じソリューション内にあり、マネージド DLL の依存関係としてリストされていても、これらのアンマネージド DLL は出力フォルダーにコピーされません。

この問題は、すべてのプロジェクトで同じ出力フォルダーを使用することで解決できることを認識しています。ほとんどのプロジェクトで既にこれを行っていますが、単体テストの出力フォルダーを分けておくことを好みます。これにより、管理されていない依存関係を持つ管理された Dll を使用する単体テストで上記の問題が発生します。

私たちが現在使用しているソリューションは、必要な DLL をコピーするビルド前のイベントですが、マネージド DLL を使用するすべてのプロジェクトで繰り返す必要があるため、これは時間を浪費し、エラーが発生しやすくなります。

したがって、マネージ DLL をコピーすることを決定するたびに、常にマネージ DLL のアンマネージ依存関係をコピーする必要があることをビルド システムに理解させる方法があるかどうかを知りたいですか?