問題タブ [unsafe]

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 に答える
1612 参照

c# - C# から AuditQuerySystemPolicy() (advapi32.dll) を呼び出すと、「パラメーターが正しくありません」が返されます

シーケンスは次のようになります。

これらはすべて機能し、最後のものを除いて、期待される適切な値を返します。呼び出すAuditQuerySystemPolicy()と、「パラメーターが正しくありません」というエラーが表示されます。微妙なアンマーシャリングの問題があるに違いないと思います。私はおそらく正確に何がAuditEnumerateSubCategories()返されるかを誤解していますが、困惑しています。

ご覧のとおり (コメント済み) リターン ポインターをポインターとして逆参照しようとしAuditEnumerateSubCategories()ました。それをしてもしなくても同じ結果になります。

コード:

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

c# - リフレクションを介してメソッドが安全でないかどうかを判断する

unsafeリフレクションを介して修飾子を持つメソッドを除外する方法を探しています。メソッド属性ではないようです。

方法はありますか?

編集:この情報はメタデータにないようです。少なくとも、IL には表示されません。ただし、リフレクターはunsafeC# ビューで修飾子を表示します。それがどのように行われたかについてのアイデアはありますか?

EDIT 2:私のニーズのために、メソッドのパラメーターの1つがポインターである場合、または戻り値の型がポインターである場合、メソッドは安全ではないことを前提としたチェックになりました。

もちろん、これは安全でないブロックがメソッド内で実行される状況を処理しませんが、繰り返しになりますが、私が関心を持っているのはメソッド シグネチャだけです。

ありがとう!

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

c# - .NET: オブジェクトの格納場所またはアドレスを表示しますか?

オブジェクトの「アドレス」を取得する方法はありますか? これはデモンストレーション用です。これは一般的には悪い考えであり、コードとして機能する場合は理解していunsafeます。プロジェクトは、安全でないコードを許可するように調整されています。しかし、私の試みは失敗しました。私がこれまでに持っているコードはコンパイルされていません:

Error: Cannot take the address of, get the size of, or declare a pointer to a managed type ('object')

メモリアドレスを取得できない場合でも、メモリスロットまたはそのオブジェクトの場所を示す何かが考えられます。

背景: 私の意図は、値渡しと参照渡しの違いを示すデモを作成し、これらのオブジェクトの場所をダンプすることです。

2010 年 6 月 27 日追加:

私は最終的に、.NET プログラム自体からそれを行うという考えを放棄しました。良い解決策にはならないようです。たとえそれが機能したとしても、コードが乱雑になり、結果を簡単な方法で説明したり、デモ目的で使用したりすることはほとんどできません。以下の回答でアドバイスされている方法で、優れた(CLR対応を意味する)デバッガーを使用して実行したいと思います。

デバッグは、構成設定のオプションを有効にすることで VS 内で改善できますがEnable Unmanaged Debugging、残念ながら、Visual Studio の無料エクスプレス エディション (現在自宅にある唯一のバージョン) では利用できません。手動で機能させる方法はありますか?Enable Unmanaged Debugging

少し苦労した後、WinDbg を提供するDebugging Tools for Windowsをインストールしました。何年も前にドライバー開発に使用した優れたツールです。今では巨大なパッケージの一部です。指示に従って、SOS.DLL の方法を成功させようとしましたが、成功しませんでした。このDLLも見つかりません。このソリューションでもEnable Unmanaged Debugging、プロジェクトにフラグが必要なようです...

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

c# - C# での void* からオブジェクトへの変換

C# プロジェクトでは、構造体に参照を配置してオブジェクト パラメーターを渡す必要があります。つまり、ディスパッチャーに渡された構造があります

lpObject は、次のようなカスタム オブジェクトへのポインターを保持します。

そして、SOMESTRUCT 構造体がメソッドからメソッドへと渡され、最終的にコードに到達します。実行フローも奇妙な SOMSTRUCT システムも変更できないため、唯一の解決策は、オブジェクトを次のようなポインターにキャストすることだと推測しました。

ただし、lpObject フィールドから myObject メンバーを取得する方法がわかりません。このようなもの:

それを行う方法はありますか、それとも不可能ですか?ガベージ コレクターにオブジェクトを処理するように指示するにはどうすればよいですか? 新しいガベージ コレクション オブジェクトを作成し、フィールドごとにデータをコピーする必要がありますか?

ティア、

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

c# - C#の安全でないコード

C#での安全でないコードの制限は何ですか?たとえば、CまたはC ++を使用しているかのように、事実上任意のポインタキャストと算術演算を実行できますか?

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

c# - intをbyte*に設定する方法C#

バイト*の特定のインデックスでintをバイト*に変換するにはどうすればよいですか?

理想的には、次のようなものが欲しいです。

ビットの最初の部分をigm[4]に設定し、残りをigm[5]に設定します。

編集:私はこれを処理するための多くの可能な方法があるかもしれないことを理解しています、私は可能であれば最も効率的な方法を探しています。

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

c# - C# での bool* の有用性

bool*意味のある方法で使用できますか。たとえば、どのように変換bool*するか、バイトに保存しますかbytebool*

私の目標は、自分のプロジェクトで自分の記憶を管理することです。詳細は重要ではありません。やりたいことだけです。今、私は自分の変数を保存できるようにしたいのですが、たまたまブール値を保存する必要があります。unsafeと を使用してbyte*、このブール値を保存し、スペースを最大限に活用するにはどうすればよいですか? 理想的には、バイトに 4 ビットを格納します。

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

.net - .NET で安全でないコードを使用する場合、制限はありますか?

.NET に、安全でないコードを許可するオプションが表示されます。画像をビットマップにすばやくコピーできるように設定されているアプリは 1 つだけです。

そのボックスにチェックを入れたので、制限はありますか? mono は Linux で問題なく動作するようです。これまでのところ問題は見られません。

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

.net - 安全でないコードのCLRと配列へのポインタポイント?

CLRが安全でないコードとどのように相互作用するかGoogleでさまざまな結果を見つけましたが、理解できませんでした。ガベージコレクターが安全でないコードで動作していることも混乱していますか?はいの場合、どのように?

配列へのポインタを指すことができません、最初の要素このコードを試します

しかし、私はそのエラーを受け取りましたエラー:タイプ'int[]'を'int*'に暗黙的に変換できません

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

c# - C#からのC++関数の呼び出し-不均衡なスタック

次のシグネチャを持つアンマネージC++関数があります。

私はそれをC#から呼び出そうとしています:

..。

古いC++プロジェクトの仕様からわかる限り、paramの場合はnull、 retの場合は0の両方が関数への有効な入力です。電話をかけようとするとうまくいくようですが、終了すると次のエラーが発生します。

PInvokeStackImbalanceが検出されました

PInvoke関数'...::Invoke'の呼び出しでスタックのバランスが崩れました。これは、マネージドPInvokeシグニチャがアンマネージドターゲットシグニチャと一致しないことが原因である可能性があります。PInvokeシグニチャの呼び出し規約とパラメータがターゲットのアンマネージドシグニチャと一致することを確認してください。

私は考えられることはほとんど何でも試しましたが(安全ではないことが最後の手段でした)、不均衡なスタックを取得せずに関数を実行する方法を見つけることができません。他に試すことができるものはありますか?