問題タブ [unmanaged]
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.
c# - C#を使用してマネージコードにアンマネージ構造体をマーシャリングする
外部アプリケーションから取得するときにbytes[]を処理する必要があります。外部アプリケーションもC#で実行され、UDPを介してバイトを送信します。彼らは以下に述べる構造体から変換されたバイトを送信しています:
したがって、バイトを取得するときは、その中のchar []を取り出し、そのchar[]から文字列を取り出す必要があります。
私はこの種の管理されていないコーディングに不慣れです。
c# - 親の管理されていない win32 アプリの子を見つける方法
基本的に、C# で呼び出す win32 メソッドを探して、アンマネージド アプリケーションの子にフォーカスを設定します。
しかし、最初に、問題である子コントロールのハンドルを見つける必要があります。これを解決するための便利な win32 関数はありますか?
c# - アンマネージ C++ コードからマネージ C# コンポーネントを呼び出す、構成を定義する方法
アンマネージ C++ サービスから C# コンポーネントを呼び出したいと考えています。C# コンポーネントが期待する構成項目を設定する必要があります。config の名前と配置場所。
例えば。親フォルダー\cplusplusservice.exe
別のフォルダ\csharp.dll
csharp.dll.config またはそれに相当するものが必要です。
ありがとう、
vb.net - それぞれへの参照を必要とせずに、これらの管理されていないリソースを破棄できますか?
4 つの異なるメインフレームへの接続を管理するクラス bMainframe があります。基盤となる同じアンマネージ ライブラリを特定の方法で開いたり、一度に複数のメインフレームに接続したりできます。各ライブラリには、管理されていないメインフレーム接続リソース用の独自の破棄コードがあります。ラッパーには、個々のメインフレーム接続の破棄コードを呼び出すコードもあります。
これは、誰かのプロジェクトが 4 つのメインフレームすべてを使用せず、ラッパーでディスポーザルを呼び出す場合にエラーを引き起こします。(FileLoadException は、4 つの管理されたメインフレームのアセンブリ X をロードできませんでした) その廃棄コードは、4 つのどれが何もない/null でないかをチェックするためです。何も/nullの場合でも、これにより.netがアセンブリをロードしようとしてクラッシュします。
外側のラッパーの破棄コードは役に立ちますか、それとも必要ですか? タイプ/アセンブリをロードするために.netをトリガーしないタイプのアセンブリがロードされているかどうかを確認する方法はありますか?
以下のコードを変更して fileloadexception をブロックしましたが、これが最善の方法だとは思いません。
.net - Windows でアンマネージド C++ コードからマネージド .NET コードを呼び出す方法と、その逆の方法を教えてください。
VC 6.0 を使用して開発された純粋な C++ アプリケーションがあります。このアプリケーションで C# で開発されたライブラリを利用したいと考えています。ネイティブ実行可能ファイルから C# ライブラリのメソッドを呼び出すにはどうすればよいですか? アンマネージド C++ ネイティブ アプリケーションをマネージド コードに変換したくありません。同様に、どうすれば逆になりますか?PInvoke が唯一のオプションですか? 同じことについての参照やポインタをいただければ幸いです。
c# - ソリューションにアンマネージ コードがあるかどうかを確認するにはどうすればよいですか?
私たちには、プロジェクトに取り組んでいる多くの人がいます。アンマネージ コードまたはタイプセーフでないコードがある場合、ソリューション全体をスキャンしてチェックするツールはありますか?
目的は、ソリューション全体を完全に管理されたコードでホストし、抜け穴を見つけて、タイプ セーフで管理されたコードになるように修正することです。
考慮して対処する必要がある一般的な抜け穴は何ですか?
ありがとう。
windows - 方法: プライベート SxS アセンブリとしての msvcrt9 の複数のバージョン?
Visual Studio 9 を使用して、過去にビルドされたビルド前の Dll モジュールで構成されるプロジェクトがあります。
プロジェクトの EXE は現在、Visual Studio 9 の SP1 を使用してビルドされています。
EXE を展開するときに管理アクセスを要求したくないため、C ランタイムはアプリケーションのルートにバンドルされています。Dll: MSVCRT90.DLL とそのマニフェスト: Microsoft.VC90.CRT.manifest
現在、ランタイム マニフェストの EXE と最新バージョンはすべて一致しています。アプリケーション マニフェストは msvcrt.dll の 9.0.30729.1 を要求しており、crt マニフェストには msvcrt90.dll がバージョン 9.0.30729.1 であることを確認するエントリが含まれています。
さて、問題です。私たちのアプリケーションで使用されているサード パーティの DLL ライブラリは、元の msvcrt90.dll バージョン 9.0.21022.8 に対してリンクされており、この効果に対する内部マニフェストを持っています。
VS9 CRuntime の両方のバージョンがインストールされている開発用 PC で、アプリは動作します。アプリを初めてインストールする「新しい」PC では、DLL のロードに失敗します。
今、私にできるチートがいくつかあります。1 つは、アプリを 9.0.2 に戻すことです。元のソース メディアから 9.0.2 DLL を取得します。9.0.3 が望ましいため、これは望ましくありません。または、サードパーティのライブラリを再構築するために一生懸命努力しています。
さらに、私たちの開発用 PC では、サード パーティのライブラリが古い dll を要求すると、新しい dll にリダイレクトされることを確信しています。それらはバイナリ互換です。
アプリケーション マニフェストとアセンブリは、この種のごみから私たち全員を救うことを目的としていました。exe と dll の両方を読み込めるように、アセンブリ マニフェスト ファイルを編集できる必要があります。
c# - CanonEDSDKMemoryStreamイメージ
私はキヤノンEDSDKとしばらく戦っています。ライブラリにファイルを直接ディスクに保存させることはできますが、イメージbyte[]をメモリに保持することはできません。EDSDKストリームをbyte[]にMarshal.Copy()しようとすると、常に次のエラーが発生します。
AccessViolationException:保護されたメモリの読み取りまたは書き込みを試みました。これは多くの場合、他のメモリが破損していることを示しています。
以下は、ストリームを取得するために使用したコードのバリエーションの1つです。
ブレークポイントは、画像が実際にそこにあることを(EdsDirectoryItemInfoオブジェクトを介して)明らかにしますが、なぜ私が例外を取得するのかわかりません。私は敗北を受け入れて、ディスクから結果の画像を読み取るだけで、CreateFileStreamメソッドを介して簡単に書き込むことができるようにするという考えをいじっていましたが、実際には、メモリ内の画像を操作できるようにする必要があります。
何か案は?
更新:バージョン2.5と2.6の両方でこの動作が見られます。
c# - C# の Marshal.Copy の NUL 文字
次のメソッドが定義されています。
このメソッドでは、提供された文字列 (recordInformation) が C で記述されたメソッド (UnmanagedMethod) に渡されます。このメソッドについて私が持っているドキュメントに基づいて、bufferSize は適切に設定されています。ただし、Marshal.Copy は代わりに、recordInformation.Length のサイズの配列を作成します。ray を outputRecord 変数に割り当てたとき、文字列の内容は bufferSize の長さです。ただし、recordInformation.Length フィールドに到達するまで、文字列の残りを埋める NUL (文字 0) がいくつかあります。UnmanagedMethod パラメータ リストの最後のパラメータを bufferSize に変更すると、出力文字列は NUL 文字だけになります。
マーシャリングが間違っていますか、または文字列がバイト配列から作成された後に NUL 文字を削除する方法はありますか?
ありがとう
c# - [StructLayout] を System.Runtime.InteropServices を使用しないものに置き換えますか?
私は低レベルのプログラミングの経験がなく、[StructLayout(LayoutKind.Explicit)] を使用しないためにこのコードが必要です。私のサイトは共有ホスト上で中程度の信頼で実行されています。したがって、このコードがそこにあると実行されません。
更新: これを Octree 内で使用して、png ファイルを量子化しています。
誰かが回避策を知っていますか?
ここで新しい質問を更新=>マーシャリングなしで安全に画像の量子化を行う方法はありますか?