問題タブ [loadlibrary]
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.
api - GetProcAdress は常にゼロを返します
本当に不思議な問題に遭遇しました。関数 GetProcAddress を使用すると、常にゼロになります。
「CreateProcess」、「LoadLibrary」などを使用しても、この行は常にゼロを返します。これはなぜですか?
関数の宣言:
visual-c++ - LoadLibrary が失敗します。GetLastError は役に立たない
Visual Studio 2003 .NET から Visual Studio 2010 に変換したプロジェクトがあります。これは .NET プロジェクトではありません。Visual C++ (アンマネージ) です。
DLL は追加の DLL を取り込みます。実行可能ファイルをこの DLL にリンクすると、DLL の初期化中に実行可能ファイルが停止します。(呼び出されている静的オブジェクトのコンストラクターがあり、それらの操作を確認できます。) VS 2010 で作成されたすべての DLL をパスから削除しましたが、そのうちの 1 つを除き、エラーが発生しました。それを VS.NET で作成されたバージョンに置き換えると、プログラムを実行できます。
有益な情報が得られないので、DLL に直接リンクせず、代わりに LoadLibrary を使用してライブラリをロードするテスト アプリケーションを作成することにしました。アイデアは、GetLastError() を使用してライブラリの問題を把握できるようにすることでした。立ち入り禁止; エラー コード -529697949 が表示されますが、これは Windows エラー コードではありません。(DLL を VS.NET で作成したバージョンに変更すると、プログラムは DLL を適切にロードします。)
Dependency Walker (www.dependencywalker.com) を使用して DLL をチェックしたところ、IESHIMS.DLL と WER.DLL が強調表示され、「少なくとも 1 つの遅延読み込み依存モジュールが見つかりませんでした」と表示されました。そのツールで他にエラーは発生していません。VS.NET で作成された DLL で実行すると、同じ 2 つの警告が表示されるので、これは危険だと思います。
最後に、Process Monitor (sysinternals.com) を実行してテスト プログラムを監視し、Path に文字列 "dll" を含むすべてのエントリを調べました。このリストには特に有益なものはありません。DLL の読み込みに失敗する理由がわかりません。
DONT_RESOLVE_DLL_REFERENCES で LoadLibraryEx を使用すると、ライブラリが読み込まれるため、これは依存関係の問題のように見えます。そのため、依存関係ウォーカーが特に役に立たないことに驚いています。
Windows 2008 R2 と Windows 2003 でこれを試しました。同じ動作。
助言がありますか?
windows - ファイル内のオフセットから LoadLibrary
さまざまなタスクを実行する多数のクラスがあるスクリプト可能なゲーム エンジンを作成しています。エンジンのサイズは急速に拡大しているため、大きな実行可能ファイルを dll モジュールに分割して、ゲーム ライターが実際に使用するコンポーネントのみを含めることができるようにすることを考えました。ユーザーがゲーム (つまりスクリプト) をコンパイルするときに、正しい dll を最終的な実行可能ファイルの一部にする必要があります。私はすでにかなりの量のオーバーレイ データを持っているので、このブロックの一部として dll を保存できるかもしれないと考えました。私の質問はこれに要約されます:
LoadLibrary をだまして特定のオフセットでファイルの読み取りを開始することは可能ですか? これにより、dll をクリーンではない一時ファイルに抽出するか、dll の自動インクルードを完全に破棄して、ユーザーにゲームと一緒に dll をパッケージ化するように指示する必要がなくなります。
最初は「メモリから dll をロードする」アプローチを考えていましたが、移植性の理由と単に恐ろしいハックのように見えるという理由で拒否しました。
何かご意見は?
敬具、
フィリップ・ベネフォール
android - Android ロード ネイティブ ライブラリ
スタンドアロン NDK ツールチェーンで構築したライブラリを読み込もうとしています。
libGLmove.so をビルドし、Eclipse プロジェクトの libs/armeabi に配置しました。
ただし、への呼び出しSystem.loadLibrary("GLmove")
はUnsatisfiedLinkError
問題を解決する方法、または Android にライブラリを見つけさせる方法についてのアイデアはありますか? ndk-build はビルド後にライブラリをどのようにパッケージ化しますか?
編集:正確なコンパイルフラグは次のとおりです。
/Users/thomas/Documents/android-ndk-r5b/toolchains/arm-eabi-4.4.0/prebuilt/darwin-x86/bin/arm-eabi-g++ --sysroot=/Users/thomas/Documents/android-ndk -r5b/platforms/android-8/arch-arm -march=armv7-a -mfloat-abi=softfp -mfpu=neon -Wl,--fix-cortex-a8 -fno-exceptions -fno-rtti -nostdlib -fpic -共有 -o GLmove.so -O3
winapi - LoadLibrary が失敗し、Dependency Walker が役に立たない
QtSql に QOCI プラグインを使用しようとしていましたが、問題が発生するまで: QOCI プラグインが機能しない理由
ただし、ライブラリの読み込みの問題であることが判明したため(少なくとも私はそう思います)、新しい質問であるため、質問の主題を変更することにしました。
dll ファイル (qsqloci4.dll と呼ばれる) があります。LoadLibrary でロードしようとすると失敗し、GetLastError が ERROR_MOD_NOT_FOUND を返します。LoadLibraryEx でロードしようとすると、3 番目のパラメータが DONT_RESOLVE_DLL_REFERENCES で、正常にロードされます(NULL は返されません)。
だから、私はそれが依存関係の問題だと思った。dll ファイルを依存関係ウォーカーで開いたところ、QtCore4.dll と QtSql4.dll の 2 つのファイルが見つかりませんでした。ただし、これらのファイルはアプリケーションの作業ディレクトリにあり、これらの dll に依存する他の dll ファイル (qsqlpsql4.dll など) は正常にロードされます。
その他の dll (依存関係ウォーカーによって配置される) は次のとおりです。
- oci.dll : QtCore4.dll および QtSql4.dll と同じフォルダーにあり、アプリがアクセスできることを意味します
- kernel32.dll : アプリで見つけるのが最も簡単な dll だと思います
- msvscr80.dll : これを使用する他の dll ファイルは正常にロードできます。
これが私の質問です:依存関係ウォーカーが言うと:「あなたはqtのものを除くすべてのdllを持っています」と私はqt dllを持っていると確信しています.LoadLibraryがERROR_MOD_NOT_FOUNDで失敗する他の理由は何ですか?
winapi - C ++ / CLI:exeファイルでLoadLibrary+GetProcAddressを使用する
これまで、LoadLibraryとGetProcAddressを使用してdllをロードし、具体的なオブジェクトを作成して共通のインターフェイスを返す、ある種のプラグインメカニズムがありました。これは、dllの1つをexeファイルにする必要があると判断するまでは正常に機能しました。
LoadLibraryのドキュメントには、exeにも使用できると記載されているので、試してみました。exeは、GetProcAddressとして、エラーなしでロードされます。しかし、具象オブジェクトのコンストラクターを呼び出そうとすると、アクセス違反が発生します。
exeをロードしても、使用するすべてのdllがロードされないため、これが発生すると思いました。そこで、LoadLibraryを使用してロードしようとしましたが、同じエラーが発生しました。これについて何かアドバイスはありますか?
これが私のコードです(混合C ++ / CLI):
(AssemblyLoader :: GetInstance()。LoadAssemblyは:: LoadLibraryの単なるラッパーです)
c++ - MFC DLL からダイアログを表示
フォームを読み込んだが、機能のないボタンのみ
フォームの完全な機能をロードする方法と、DLL ソース コードを持っていない方法
windows - IE用のATLベースのHBOプラグイン:他のマシンにライブラリがありません
Visual Studio2010でInternetExplorer用のHBOを作成しています。私の開発マシンでは、すべてがうまく機能しています。DLLを登録するには、次のようなシステムツールzippy32を使用します。
ただし、他のマシンで同じことを行おうとすると、システムがDLLモジュールをロードできなかったというエラーメッセージが表示されます。拡張DLLへのパスが正しいと確信しているので、システムは他の依存関係を満たしていないと思います。VSでは、プラグインを「リリース」モードでビルドするため、他の場所で実行するために必要なすべてのものが含まれている必要があります。また、/MDを/MTに変更しました(友人のアドバイス-残念ながら機能していません)。
追加情報に対してシステムイベントログを検索してきましたが、成功しませんでした。私はそれから何をしなければなりませんか?つまり、他のマシンにどのライブラリをインストールする必要があるかを確認する方法を意味します(または、それは明らかです。名前を教えてください)。
編集:解決策を見つけました。誰かが役立つと思うかもしれません。VisualStudioのリンクされた追加の依存関係に引用符なしで「atl.lib」を追加すると、すべて正常に機能するはずです。
よろしく
assembly - ASM: LoadLibrary と GetProcAddress
私は初めて ASM を使用しています。続行する前に、これを書いたときにすべてを正しく理解したかどうかを知る必要があります。現在のコードは次のようになります。
0xDEADBEEF はダミーのアドレスで、後でパッチを適用します。何か間違っていることでも?=)
delphi - DLLからのDelphiインターフェース
DelphiXEの使用。
DLLからDelphiインターフェイスオブジェクトにアクセスしようとすると、静的ではなく動的にアクセスしようとすると失敗します。
dllのインターフェイスユニットは、インターフェイスのインスタンスを返す関数を実装しています。静的にリンクされている場合、関数に入ると結果はnilになり、すべてが機能します。動的にロードする場合、結果は非nilであるため、結果への割り当てが行われている場合、IntFCopyコードはそれを非nilと見なし、割り当ての前に解放しようとします。これにより、例外が発生します。
任意の洞察をいただければ幸いです。
DLLにはtestinterfaceload_uが含まれ、testIntをエクスポートします。
testinterfaceload_uは、インターフェースと単純なクラスの実装を定義する単位です。
これは、dllをロードし、testInt関数を呼び出してインターフェイスを返すコンソールアプリです。