問題タブ [mixed-mode]
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.
asp.net-mvc-2 - WebForms と MVC の混在: MasterPage をどうすればよいですか?
WebForms アプリを MVC に移行したいと考えています。このプロセスは段階的に行われるため、両方のシステムが共存する必要があります。
問題は、WebForms ページ用と MVC ビュー用の 2 つの MasterPages を用意する必要があるかどうかです。1つだけにする方法はありますか?
visual-studio - アンマネージ BCL (InternalCall) メソッドにデバッグするにはどうすればよいですか?
[MethodImpl(MethodImplOptions.InternalCall)]
おそらく C++ で実装されている BCL メソッドの実装をデバッグしたいと考えています。(この特定のケースでは、System.String.nativeCompareOrdinal を見ています。) これは主に、私がおせっかいで、それがどのように実装されているか知りたいからです。
ただし、Visual Studio デバッガーはそのメソッドにステップインすることを拒否しています。この呼び出しにブレークポイントを設定できます。
次に、[デバッグ] > [ウィンドウ] > [逆アセンブリ] を表示し、Equals 呼び出しにステップ インして、call
x86 命令に到達するまでステップ実行します。しかし、その上で「ステップ イン」を使用しようとするとcall
(Reflector からは nativeCompareOrdinal 呼び出しであることがわかっています)、必要なように nativeCompareOrdinal 内の最初の命令にステップ インしません。 Equals の次の x86 命令。
x64 アプリでは混合モードのデバッグがサポートされていないため、x86 としてビルドしています。[ツール] > [オプション] > [デバッグ] で [マイ コードのみ] のチェックを外し、[プロジェクト プロパティ] > [デバッグ] タブで [アンマネージ コードのデバッグを有効にする] をチェックしましたが、call
. また、プロセスを開始してからデバッガーをアタッチし、マネージド デバッガーとネイティブ デバッガーの両方を明示的にアタッチしようとしましたが、それでもその InternalCall メソッドにステップ インしません。
Visual Studio デバッガーをアンマネージ メソッドにステップインさせるにはどうすればよいですか?
c# - IIS 7.5および混合モード認証(シングルサインオン)
誰かがこれを達成することができましたか?
アプリケーションは次のように機能するはずです。
- アプリ管理者はADユーザーを追加できます
- アプリ管理者はAD以外のユーザーを定義できます
- ユーザーがADから追加され、同じADからアプリケーションにアクセスしようとすると、アプリケーションは自動的にログインする必要があります(シングルサインオン)。
- ユーザーがAD以外の場合、またはアプリケーションユーザーとして追加されていない場合-アプリケーションログインフォームが表示されます
言うまでもなく、私はIIS6でこれを達成することができました。これまでにIIS7と7.5を使用していくつかの手法を読みましたが、運用サーバーに展開した場合、実際にはどれも機能しないようです。
これまでのところ、2つの別々のWebアプリケーションがあります。1つのWebアプリケーションはフォーム認証で構成されています-これがメインです。その他はWindows認証として構成されています。
つまり、ユーザーはメインアプリケーションにアクセスしようとします。これにより、ドメインユーザー名(NTLM)を抽出しようとする他のアプリケーションにリダイレクトされ、メインアプリケーションにリダイレクトされます。メインアプリケーションはADユーザーとして彼にログインしようとします。これが失敗した場合、フォームログインが表示されます。ADユーザーがアプリケーションユーザーとして追加された場合(アプリケーションの個別の管理モジュールを使用)、ADユーザーは自動的に認証される必要があります。つまり、IISログインプロンプトは表示されません。
これらの2つのアプリケーションは、同じアプリケーションプールで実行されています。また、両方とも統合パイプラインモードです。
これは、開発用のwin7 IISでセットアップした場合は機能しますが、IIS7.5を使用してWin2008サーバーにアプリケーションを展開すると機能しません。IISログインプロンプトが表示され続けます。IISログインプロンプトにクレデンシャルを入力すると、最終的にアプリケーションにログインします。
誰かが同様の問題を抱えていて、うまくいけばそれを解決しましたか?
c++-cli - アンマネージ C++ DLL とマネージ C++ クラス ライブラリ DLL のリンク
質問のように、Creating simple c++.net wrapper. ステップバイステップ
.NET で C++ クラスを使用しようとしていますが、Visual Studio (2008) でのビルドに問題があります。
アンマネージ クラス A (/clr でコンパイルされた C++) があります。A をラップし、A のメソッドに一致するメソッド デリゲートを持つ C++/clr クラス 'Class1' を作成しました。
クラス A のユニット ソース ファイルを Class1 (マネージ) のクラス ライブラリ プロジェクトに含めると、すべてのリンクに問題はなく、正常に動作しますが、A のような多くのアンマネージ C++ クラスがあり、それらを DLL に入れてリンクしようとしています。 (クラス ラッパーの) マネージ ライブラリへの DLL。[実際には、この時点でこれらの DLL をリンクする必要はないと思いますが、コンパイラがそれを要求しているようで、以下に示す同じエラーが発生します。]
VisualC++ / CLR / クラス ライブラリを作成し、C++ クラス (下記の A) を追加してビルドしました。[既定の設定を使用しましたが、プロジェクト リンカの設定で、[はい] と [いいえ] の両方で [出力の登録] を試しました。] エラーは発生せず、.DLL ファイルが作成されました。
VisualC++ / CLR / クラス ライブラリを作成し、ラッパー クラス 'Class1' を作成しました。すべてデフォルト設定を使用しました。プロジェクトのプロパティで、[参照] の [新しい参照の追加] をクリックし、最初の手順で作成した DLL を選択しました。
リンカー エラーが発生します。
ラッパー クラス ライブラリ プロジェクトで A.cpp を削除した場合と同じエラー (機能するオプション)。これはプログラムではなくライブラリであるため、ビルドがそもそも外部を解決しようとする理由がわかりません。
ラッパー クラス ライブラリ プロジェクトのプロパティに追加したり、アンマネージ クラスの DLL やコンパイラ オプションを登録したりする必要があるものはありますか? DLL と一緒に .lib ファイルも必要ですか? (プロジェクトのターゲット ディレクトリに lib ファイルは表示されません)
__declspec(dllexport) を使用する必要がありますか [それは、クラス メンバーではなく、C スタイルの関数のみであると考えられていました] 。 アンマネージ C++ ライブラリが CLR を有効にしてコンパイルされている場合でも。
(スタティック ライブラリとしてコンパイルも試みましたが、.lib ファイルを CLR クラス ライブラリ プロジェクトに追加する方法がわかりません)。
私のテストクラスは
実装で:
そしてラッパークラスは
質問に従って: C++/CLI 混合モード DLL の作成 私も試しました:
また、このプッシュは A.cpp の周りで管理されています。
更新: mcdave の応答に従って、/clr を削除すると DLL が生成されました。この DLL を test_NET_library で使用できるようにするにはどうすればよいですか?
References/Add New Reference を試し、新しいこの新しい DLL を選択しました。「.NET アセンブリでも登録済みの ActiveX コントロールでもないため、ファイル 'C:..\unmanaged_lib.dll' への参照を追加できませんでした。」というメッセージが表示されました。DLL はプロジェクトのファイル リストに追加されましたが、コンパイラはそれを無視しているようです。
Add/Existing item を試し、新しい DLL を選択しました。ただし、.DLL ファイルは選択可能なファイル タイプではありません。
visual-c++ - C++ ネイティブ オブジェクトをマネージ C++ CLI にマーシャリングする方法
私はたくさんのネイティブ C++ オブジェクトを持っており、クラスには DTL マップ、マップのマップ、リスト、ベクトルが含まれています。
C++ ネイティブ コードからマネージ C++ 関数を呼び出す必要があり、これらのネイティブ オブジェクトと STL コンテナー (リスト、マップ、マップのマップ) を C++/CLI に渡す必要があります。これらのオブジェクトをマーシャリングするか、何らかの方法でシリアル化する必要があります。どうすれば問題なくそれを行うことができますか。そのため、マネージド C++/CLI にマーシャリングしてシリアライズした後、マップはディクショナリとディクショナリのディクショナリ、マネージド List<> を含む stl リストなどでマーシャリングする必要があります。
すべてのケースでこれを達成するにはどうすればよいですか? マーシャリングの問題の複雑な処理が必要ですか...?
よろしくウスマン
memory - pin_ptrネイティブvoid*ヘルプ
セットアップ
以下に定義されているネイティブ関数を持つPDFAPIがあります。
C ++ / CLIラッパー関数で上記のコードを呼び出すと、正しい文字列が返されますが、PDF_CloseDocを呼び出すとAccessViolationExceptionがスローされます。WOOPS。ドキュメントのポインタをpin_ptrするのを忘れました。
問題
pin_ptr pdocを実行すると、これらのネイティブ関数を正常に呼び出すことができますが、PDF_GetMetaTextが返されるときに、バッファに文字列が含まれなくなります。
また、buffer [0]を固定しようとしましたが、GetMetaTextでアクセス違反の例外が発生します。
質問
GetMetaTextで何が起こっているのかわからないので、pdocに何が起こっているのかわかりません。上記のコードに対する提案はありますか?
assemblies - XP の vc2005 混合モード DLL で FileLoadException を引き起こす CRT 依存関係を修正するにはどうすればよいですか?
Visual Studio 2005 でビルドされた混合モードの DLL があります。Dependency Walker で、私の DLL は次の CRT DLL の依存関係を示しています。これは私の Windows 7 開発マシン上にあることに注意してください。
c:\windows\winsxs\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4927_none_d08a205e442db5b5\MSVCP80.DLL
"\MSVCR80.DLL
"\MSVCM80.DLL
8.0.50727.4927
Visual Studio 2005 を使用している私の Windows 7 開発マシンでは、これは正常にコンパイルおよび実行されます。問題は、最新の CRT がインストールされている Windows XP テスト マシンで実行できないことです。
DLL を XP マシンの depenency walker にドラッグすると、\System32 で DLL を検索しているようです... (フル パスを表示しようとしたところ、それらのパスはなく、黄色の感嘆符だけでした)
問題は、WinSxS の crt のこのバージョン (ビルド 4927) が XP テスト マシンにインストールされていないことです。最新の CRT がインストールされた Visual Studio 2005 (sp1?) があります。
8.0.50727.4053は、MSDN で見つけた最新バージョンです。
これは SO に投稿された最もエキサイティングな質問ではないことを認識していますが、この 4927 ランタイムがどうなっているのか知っている人はいますか?
* 編集 *
MT.exe によって生成されたマニフェスト:
したがって、ターゲットとしている 3 つの異なるバージョンがあります...
visual-studio-2008 - 混合モードアセンブリ[log4net]は.NET4.0に読み込まれず、.NET4.0用に再コンパイルしても機能しません
ここで何度も質問されたり、あちこちでブログに取り上げられたりする質問をするのは嫌いですが、アップグレードしたプロジェクトを機能させることはできません。
私のアプリケーションは元々VS2008で書かれており、.NET3.5SP1を対象としています。VS2010にアップグレードしたばかりで、新しい言語機能と統合されたMEFを利用しようと考えたので、すべてのプロジェクトを.NET4.0をターゲットに変更しました。すべて(ビルド後のイベント、MEF参照など)を適切にセットアップして適切にコンパイルした後、アプリケーションを実行すると、これまでにない有名なエラーが発生しました。
混合モードアセンブリは、ランタイムのバージョン「v2.0.50727」に対して構築されており、追加の構成情報がないと4.0ランタイムにロードできません。
次に、次の属性を<startup>
要素に追加しましたapp.config
:
しかし、アプリケーションを実行しても、同じエラーが発生します。この問題をさらにデバッグするためにできることはありますか?私は文字通り他に何を試すべきか分かりません。混合モードアセンブリとそれらがCLRと対話する方法についてできるだけ多くの情報を見つけようとしていますが、この分野での私の背景知識はせいぜい限られています。
また、log4netのソースをターゲットの.NET 4.0に再コンパイルすることで問題を回避しようとしましたが、期待どおりに機能しませんでした。コンパイル後、次のエラーが発生しました。
メンバーのオーバーライド中に継承セキュリティルールに違反しました:'log4net.Util.ReadOnlyPropertiesDictionary.GetObjectData(System.Runtime.Serialization.SerializationInfo、System.Runtime.Serialization.StreamingContext)'。オーバーライドするメソッドのセキュリティアクセシビリティは、オーバーライドされるメソッドのセキュリティアクセシビリティと一致する必要があります。
そこで、AssemblyInfo.csに次の行を追加することを推奨する投稿を見つけました。
そしてそれをしたとき、私は始めたところに戻って終わりました!(混合モードアセンブリエラーあり)。
うーん。
visual-studio-2008 - 混合モードのデバッガーで単体テストを実行するにはどうすればよいですか?(VS2008)
いくつかの単体テストを修正しているので、それらをデバッグする必要があります。コールスタックが混在しているため(マネージDLLとアンマネージDLLがあります)、デバッガーを混合モードにする必要があります。
ネイティブユニットテキストを開始した場合、デバッガーはネイティブモードになり、マネージドUTを開始した場合、デバッガーは管理されます。
混合モードで設定する方法はありますか?
事前に仲間に感謝します。
編集:物事を明確にするために、私がデバッグするのは、VisualStudio内で利用可能な単体テストリストから[デバッグ]ボタンをクリックすることです。マネージドテストでこれを行うと、デバッガーはマネージドモードで起動します。アンマネージドテスト(C ++ / CLI)でそれを行うと、デバッガーはアンマネージドモードで起動します。
c++-cli - C ++仮想テーブルエラー?
私は次の構造を持っています:
私の問題は、アンマネージコードのどこかで、Send関数を呼び出さなければならないことです。マネージコードSendから関数を呼び出しますが、Send関数はParserクラスからTransmitメソッドを呼び出します。問題は、デバッグすると、pParserインスタンスが空になることです(コンストラクターで以前にインスタンス化したことがある場合でも)。
これはガベージコレクターの問題ですか、それとも仮想テーブルの誤解を招きますか?どうすれば修正できますか?ありがとう !
更新: さらにデバッグした後、たとえばgcrootの他のインスタンスを含めると次のようになります。
gcroot<AppDomaion^> pDomain;
次に、コードで次のコマンドを実行しようとしました。
pDomain = AppDomain::CurrentDomain;
デバッガーは、pParserの場合と同じ空の値を表示します。私がしていることに何か問題がありますか?別の方法でクラスをインスタンス化する必要がありますか?
UPDATE2:
マネージド/アンマネージドは次のようになります。
ラッパー:(wrapper.h)
ラッパー(wrapper.cpp)
アンマネージド:(commLayer.h)
アンマネージド:(IInterface.h)
問題は、アンマネージコードがmInferface-> Deliver(mMessage)を呼び出すときです。mParentのインスタンスはありません。次に、ラッパーでは、mParentは空です(値= null)。アンマネージドIInterfaceからのメソッドにのみアクセスし、ラッパーCInterfaceからのWrapper^にはアクセスしないようなものです。