問題タブ [dependency-walker]
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++ - Dependency walker の C++ DLL に IESHIMS.dll と MSVCR110.dll が表示される
「Win32」プラットフォームのWindows7(64ビットOS)でビルドしたdllがあります。残念ながら、この dll を C# コードにインポートすると、次のような問題が発生します。
"
不正な形式のプログラムをロードしようとしました HRESULT: 0x8007000B
」が観察される
この DLL に DependencyWalker を使用すると、IESHIMS.dll と MSVCR110.dll の依存関係が見つかりませんでした。
これらの dll がどこから来て、作成した dll がこれら 2 つに依存するのはなぜですか? どうすればこれを乗り越えることができますか?
注: C# コードで x86 プラットフォームを使用しました。
.net-4.0 - K32EnumProcessModules により、「{dll} によってインポートされたプロシージャを読み込めませんでした」
組織内の他の人によって構築された複数のライブラリに依存するアプリケーションがあり、そのうちの 1 つが機能しなくなりました。コマンドラインで次のエラーが表示されます。
私は Dependency Walker を開いて問題の原因を突き止めようとしましたが、私は Dependency Walker の初心者であり、自分が何をしているのかよくわかりません。ログウィンドウに表示される内容は次のとおりです。
次の点を除いて、これは簡単に思えます。
- DW に慣れていないため、このエラーが実際に参照しているモジュールを見つけることができないようです
- 古いバージョンのアプリケーションに同梱されている同じ DLL は、まだ機能しており、Dependency Walker で同じことを示しています。
古い DLL と新しい DLL の唯一の違いは、新しい DLL では KERNEL32.DLL が赤色で表示され、関数 K32EnumProcessModules が赤色で表示される (エクスポートされていない) ことです。この同じ関数は、古い DLL ではまったく表示されません (緑色またはそれ以外)。
これまでの要約: 1 つの DLL は動作し、もう 1 つは動作しません。どちらも Dependency Walker で「悪い」と表示されますが、関数 K32EnumProcessModules が悪いと表示されるのは 1 つだけです。この関数が「未解決のインポート」エラーの原因であるかどうかはわかりません。調査したいと思います。
これを引き起こした可能性があると思われるアプリケーションで行った唯一の変更は、ランタイムを .NET 2.5 から .NET 4 にアップグレードしたことです。 2.5 以上の .NET コンポーネントを呼び出さないでください。同じライブラリを使用している私の組織の他の人は、.NET 4 で問題なく動作すると報告しています。
ほとんどの場合、どの情報がこの問題のトラブルシューティングに役立つかわからないため、まばらな情報を提供していることに気付きました。詳細を確認するために実行してほしいテストがある場合はお知らせください。
c# - C#WindowsアプリケーションでC ++ DLLを使用する:「エントリポイントが見つかりません」というエラーが発生する
私はC#でC ++ライブラリを使用するのは初めてで、C++プログラミング全般も初めてです。DLLの名前が「TestManaged.dll」であるため、「マネージ」コードであると思われるC++コードから構築されたDLLがあります。dll / C ++コードが管理されている/管理されていないかどうかは100%わかりません。
このDLLのクラスとメソッドをコードで使用したいと思いC# windows forms application
ます。このDLLには複数のクラスがあります。のこれらのクラスとそれらのクラス内のメソッドをチェックしたときObject Browser
、それらすべてにPublic
識別子があります。
これまで、このDLLをC#アプリケーションコードの参照に追加しました。私の質問で話すクラスは3つあります:Product
、、。このDLLのさまざまなクラスのオブジェクトを次のように作成できます。ReqStatus
ProductData
このDLLで呼び出される別のクラスがありProductData
、次のようにこのクラスのC++コードを取得できます。この場合、ProductData
はC#ではクラスとして表示されObject Browser
ますが、実際にはC++コードでは構造体です。これが私の質問に答えるために重要かどうかはわかりません(最後に)。
ProductData
以下は、 struct-- ProductData.h
fileを定義するC++コードです。
ReqStatus
以下は、 enum-- ReqStatus.h
fileを定義するC++コードです。識別子を指定せずに、C#コードで同じ列挙型を作成しました。
今、私が呼び出したい2つのメソッドがあり、両方に問題があります。
メソッド1:は、型のオブジェクトをパラメーターとして受け取り、C++の列挙型であるを返すクラスgetProductData
内のメソッドです。したがって、以下はメソッドの宣言です(に見られるように):Product
ProductData
ReqStatus
gerProductData
Object Browser
同じメソッドのC++の削除は次のとおりです:(実際のメソッドは長すぎるため、宣言を与えるだけです):このメソッドはProdcut.cpp
ファイル内にあります
PLATFORM_PTRは、以下のように定義されています。Platform.h
メソッド2:は、文字配列(これはわかりません)とタイプのオブジェクトをパラメーターとして受け取り、C++の列挙型であるを返すクラスgetConnected
内のメソッドです。したがって、以下はメソッドの宣言です(に見られるように):Product
ProductData
ReqStatus
getConnected
Object Browser
同じメソッドのC++の削除は次のとおりです:(実際のメソッドは長すぎるため、宣言を与えるだけです):このメソッドはProdcut.cpp
ファイル内にあります
C ++コードは、次のようにメソッドを呼び出します。
getProductData
メソッド内にメソッドへの内部呼び出しがありgetConnected
ます。
私のC#コードは次のとおりで、両方のメソッド呼び出しでエラーが発生しました。以下のコードスニペットの同じ行にエラーを配置しました。どちらの方法も独立しています。それは、C++コードのメソッドgetProductData
から呼び出されるということだけです。getConnected
両方を個別に呼び出すことができるかどうかを確認したかった。
エラー1については、StackOverflowや他のフォーラムのさまざまな記事の解決策を試しましたが、解決できませんでした。参考までに、「SomePortCOM」を次のように変更してみましたが、うまくいきません。
更新:このコードは現在正常に機能しており、エラー1(無効な引数)は表示されません。これで、エラー2(保護レベルのエラー)を取り除くだけで済みます。何か提案をお願いします。ありがとうございました。
Error2の場合、非常に多くのブログを検索し、考えられる解決策の1つがDLLImportの使用である可能性があることを発見しました。それも試してみましたが、次の問題があります。
DLLImportのC#宣言:
この関数をC#コードから次のように呼び出しています。
ただし、Entry point not found
エラーが発生します。このDLLによってエクスポートされた関数のリストを取得するために、dumpbin関数を実行しようとしました。しかし、機能は見当たりません。むしろ、以下のようにランダムな出力です。
更新:また、DependencyWalkerを介してこのDLLにメソッドが表示されません。これで、C++のソースコードを入手できました。しかし、私はC++コーディングにかなり慣れていません。C ++コードに変更が必要な場合は、指示を教えてください。
よろしく、ルミット
python - LinuxでPythonプログラムによって実行時にロードされたライブラリファイルのツリーを表示するには?
Windows では、Dependency Walkerツールは、実行可能ファイルによって読み込まれる DLL のツリーを表示します。
同様に、Python プログラムをLinuxで実行したときに、Python プログラムによってロードされるすべての共有ライブラリ( ) のツリーを知ることは可能ですか?*.so
c++ - (Dependency Walker) 関数に明示的な型がありません
初心者の間違いを事前にお詫び申し上げます。これが私の最初の質問です。まず、いくつかの背景:
依存関係ウォーカーを使用して、lib またはソース コードがない .dll 内の C++ 関数を検索するプログラムのモジュールを作成しようとしています。元の開発者からサポートを得られないことも想定できます。基本的に、それにアクセスする別のファイルをチェックして、それを機能させるための最小限の機能を確認しました。出力される装飾されていない名前の例を次に示します。
上の 2 つの関数は明らかに、float または void を受け取り、float または void を返します。次のようなものを使用して、同様の機能が機能するようになりました。
したがって、それらは問題ではありません。
リストの 3 番目は、void を受け取る別の関数のように見えますが、明示的な戻り値の型はありません。これは、暗黙の型を使用する必要があることを意味しますか?それは void ですか、それとも実際には関数ではありませんか? そうでない場合、それは何ですか?
4枚目はどうしようか迷っています。関連する .h ファイルなしで処理することさえ可能ですか?
私は周りを見回しましたが、関数が明示的な戻り値の型を持つ通常の関数のように見えない場合に何をすべきかについての情報を見つけることができませんでした. 同様の .dll で機能する関数を取得するために使用したのと基本的に同じコードを使用しているにもかかわらず、ここで関数 #2 を使用しようとするとアクセス違反が発生し続けます (関数 #2 だけが必要です)。したがって、.dll にはより多くの情報が必要であるか、最初に何かを初期化する必要があると推測しています。そのため、リストにある他のものに興味があります。
これは複雑な問題であることを認識しているため、おそらく「正しい答え」の解決策はありませんが、明らかな間違いを犯している場合、または問題に対処する方法について一般的な提案がある場合 (依存関係ウォーカーの代替)、教えてください。
c# - Visual Studio System.DllNotFoundException ("Unable to load DLL 'cbw32.dll'" メッセージ)
みんなおはよう、
私は C# が初めてで、いくつかの新機能を追加する予定の、既に開発されたアプリケーションを更新する必要があります。Visual Studio 2012 で開いて再構築しましたが、明らかにエラーはありませんでした。実行すると GUI は正しく表示されますが、アプリケーションを起動するとエラーが発生します。
タイプ 'System.DllNotFoundException' の初回例外が MccDaq.dll で発生しました タイプ 'System.DllNotFoundException' のハンドルされない例外が MccDaq.dll で発生しました見つかった。(HRESULT からの例外: 0x8007007E)
ここ数日解決策を探しましたが、何も見つかりませんでした。他の多くの中で、このスレッド ( Unable to load DLL (Module could not be found HRESULT: 0x8007007E) ) を見つけましたが、残念ながら運がありませんでした。実際、前述の DLL (「cbw32.dll」) を検索しても、ファイルのどこにも見つかりませんでした。また、スレッドで指摘されているように、Dependency Walker をインストールし、"MccDaq.dll" (System.DllNotFoundException が発生したファイル) を分析したところ、エラーが再び表示されました。
エラー: CPU タイプが異なるモジュールが見つかりました。警告: 遅延ロード依存モジュールにエクスポート機能がないため、少なくとも 1 つのモジュールに未解決のインポートがあります。
これをグーグルで調べても、新しいことはほとんどまたはまったくありませんが、どうやらいくつかのDLLのCPUアーキテクチャに問題があることを理解することは別として、ここにいます. 繰り返しになりますが、私は C# の初心者であることを強調しておく必要があります。それにもかかわらず、Visual Studio でエラーをトリガーするコード ブロックは次のとおりです。
ここで重要なもう 1 つの詳細は、このアプリケーションが約 4、5 年前に作成されたということです。そのため、Visual Studio 2008 を使用してプログラムする必要があると推測されます。これに関して、プロジェクトのプロパティで「ターゲット」を変更しました。 Framework:" を .NET Framework 3.5 に変更しましたが、これも成功しませんでした: 動作は変わりません。
結論として、私は行くことができる多くの異なる方向を見つけました、そしてそれは私を混乱に導きました. 誰かがこれについて私を啓発することができれば、私は完全に感謝しています.
dll - Dependency Walker がそこにあると言っているにもかかわらず、エントリ ポイントを見つけることができませんでした
アプリを起動した後、エントリ ポイント glIsQuery が見つからないというメッセージが表示されます。そこで、Dependency Walker を使用してこの問題をデバッグしました。
以下に示すように、親のインポート関数の表には、「glIsQuery」が欠落していることが示されています。
ただし、エクスポート関数リストにもシンボルが存在することが示されています(これを確認するためにダンプビンも使用しました)
どんな手掛かり?