問題タブ [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.
matlab - matlabでdllを使用する
matlab で dll fortran を使用する際に問題があります。fortran でビルドされた dll を matlab で使用できませんでした。matlab で「loadlibrary」命令を使用していますが、エラーはヘッダー ファイルに関連しています。ヘッダファイルとは?? matlab で dll fortran をロードして呼び出すための詳細情報を教えてください。
dll - 再頒布可能コンパイラ - MS Visual Studio 用の DLL
私は上級プロジェクト用のプログラミング学習ゲームを作成しており、Visual Studio 2008 C++ アプリケーションに動的にロードできる DLL をコンパイルできるコンパイラを探しています。
ここで重要な点は、コンパイラが再配布可能であるということです。VS が再配布可能であれば、それを使用します。
これまでのところ、MinGW を使用してある程度の成功を収めていますが、その成功には限界があります。現在、一度に 1 つの DLL のみをロードして動作させることができます。2 番目のものをロードしようとすると、VS C++ アプリがアクセス違反エラーでクラッシュします。
VS自体でコンパイルされた2つのDLLを問題なくロードできたので、それはMinGWに固有のものであり、DLLであり、それらがLoadLibrary()などとどのように相互作用するかであると信じるようになります。
私はかなり長い間この問題に取り組んできましたが、イライラしています。MinGW の代わりに動作することがわかっている別のコンパイラを誰かが知っている場合、またはこの問題を見たことがある場合は、おそらく 2 番目の DLL がクラッシュする理由を知っているでしょう。それぞれの DLL が何らかの方法で他の DLL を踏んでいることに関連していると確信していますが、それが何であるか、またはどのように見つけるかはわかりません。
DLL をコンパイルする方法またはロードする方法が原因である可能性があります。何も思いつきません。
フィードバックをいただければ幸いです。
編集: これらは、DLL http://pastebin.com/f675df4b0を作成するための g++ および dlltool への単純な呼び出しです。
これは、私の DLL の 1 つからのソースです。 http://pastebin.com/f5c062611
これは、DLL をロードするための私の C++ アプリのコードです。 http://pastebin.com/f52f94a18
-マイケル
glassfish - Java Web アプリケーションはネイティブ ライブラリ (.so) を使用できません
技術概要: CentOS 5 で動作する GlassFish v3 にデプロイされた Java Web サービスを開発しています。
私の Web サービスは、ネイティブ ライブラリ (.so) によって提供される機能を使用します。ネイティブ ライブラリは正常に動作しますが、アプリ サーバーを再起動せずに、ネイティブ ライブラリをロードし、Web アプリの再展開の影響を受けないように環境を正しく構成することはあまりうまくいきません。
私がこれまでに行ったことは次のとおりです。
最初に、Web サービス コードにライブラリ (static {System.load(path/to/libabc.so)};) をロードし、すべてのパスが正しく設定され、アプリケーションを再デプロイして、それが不平を言うまで正常に動作します。ライブラリは別の ClassLoader によってロードされます。ネイティブ ライブラリは 1 回しか読み込まれないことがわかりました。
これを解決するために、Web アプリケーションからライブラリ読み込みコードを削除し、Singleton クラスを作成して Lifecyle モジュールにラップし、GlassFish 共有 lib フォルダーにデプロイしてから、起動時にラッパーを実行するように GlassFish を構成しました。これは、特定の 1 つの Web アプリに関連付けられておらず、階層の上位にある ClassLoader によって読み込まれるため、すべての Web アプリケーションがそれを参照できるようになるという考えです。
GlassFish が起動すると、ネイティブ ライブラリが正常にロードされます ( linux> lsof | grep libabc.so )。ただし、Web サービス Java コードでネイティブ メソッドを実行すると、Web サービス コードは UnsatisfiedLinkError で失敗します。Web アプリケーションのコードは、起動時に読み込まれたライブラリにアクセスできないようです。
誰が私が間違っているのか教えてもらえますか?
前もって感謝します。
dll - LoadLibrary() が、マニフェストとプライベート アセンブリを含む DLL の読み込みに失敗する
複数の DLL を使用する Windows アプリケーション (EXE) に取り組んでいます。開発は VCExpress 2005 (VC 8.0) で、C のみを使用しています。
LoadLibrary
これらの DLL の一部は、EXE によって読み取られる構成ファイルに従って 動的にロードされるプラグイン/アドオン/拡張機能です。
重要: アプリケーションは移植可能 (インストールせずに USB フラッシュ ドライブなどから実行できるという意味で) である必要があり、プラグイン DLL はアプリケーション EXE と同じフォルダーにない場合があります (従来の理由)。
MSVC6 では、これは簡単です。EXE と DLL をコンパイル、リンク、配布します。
MSVC8 では、C ランタイム ライブラリ (MSVCRT) が OS と共に配布されなくなったため、インストールされていることに依存することはできません。移植性の要件を満たすには、プライベート アセンブリを使用する必要があります。すべての EXE と DLL には、マニフェストが埋め込まれています。
私の問題:経由で読み込まれたプラグイン DLLLoadLibrary()
は、EXE のフォルダーにあるプライベート アセンブリを見つけられないため、Microsoft.VC80.CRT
アセンブリが winSxS にインストールされていない限り、それらを読み込もうとすると失敗します。
キャッチ: マニフェストがプラグイン DLL から削除されると、すべてが機能します。
私の質問:
問題のケースでは、Windows はアセンブリ検索シーケンスまたはダイナミック リンク ライブラリ検索順序のいずれにも従っていないようです。具体的には、アプリケーション (EXE) のロード元ではなく、DLL のロード元のパスでプライベート アセンブリを検索します。
アセンブリを DLL に隣接させ、現在のディレクトリを変更して (作業ディレクトリのケースに関連するものを除外するために) これを確認し、期待どおりの動作を得ようとしました。LoadLibrary
SxS で使用する場合、これが通常の動作であることを他の誰かが確認できますか?マニフェストがないと、DLLは、EXE のフォルダーで
msvcr80.dll
(アセンブリ マニフェストではなく) 検出される非 SxS ロード順序にフォールバックすると想定するのは正しいですか?Microsoft.VC80.CRT.manifest
(1) と (2) について私が正しければ、マニフェストを DLL から除外するだけで何を失うのでしょうか? 言い換えると、マニフェストを除外するだけで問題を解決できないのはなぜですか?
c++ - C++ の関数ポインタと不明な数の引数
次の奇妙なコードのチャンクに遭遇しました。次の typedef があると想像してください。
そして、関数では、次の方法で DLL から関数を実行しようとしています。
問題は、LoadLibrary で取得したアドレスの関数が 2 つの整数引数を取るかどうかを知る方法がないことです。DLL 名は実行時にユーザーによって提供され、エクスポートされた関数の名前がリストされ、ユーザーテストするものを選択します(実行時も :S:S )。では、最後の行で関数呼び出しを行うことで、スタック破損の可能性への扉を開いているのではないでしょうか? これがコンパイルされることはわかっていますが、指している関数に間違った引数を渡した場合、どのような実行時エラーが発生するのでしょうか?
java - dll ライブラリ ファイルの読み込み中に問題が発生しました... java.lang.UnsatisfiedLinkError: ライブラリを読み込めません
dll ファイルのロード中に、次の例外が発生します。
問題の根本原因がわからない。誰でもこの問題を解決するのを手伝ってくれますか?
ありがとう、バスカー
c++ - 32 ビット プロセスから 64 ビット dll で LoadLibrary を呼び出す
オペレーティング システムが 64 ビットであることを検出したときに、64 ビットの dll を動的にロードする必要がある 32 ビットの exe があります。これは LoadLibrary を通じて可能ですか? そうでない場合、同じ目標を達成する別の方法はありますか?
c++ - LoadLibrary を使用して DLL をロードしようとすると、R6034「アプリケーションが C ランタイム ライブラリを正しくロードしようとしました」というメッセージが表示される
Winamp 入力プラグインをロードするラッパー プログラムを作成しています。これまでのところ、かなりの数のプラグインでうまく機能していますが、他のいくつかのプラグインでは、プラグインの DLL で LoadLibrary を呼び出そうとすると、実行時にエラー メッセージが表示されます。(ほとんどの場合、Winamp に含まれているプラグインで発生するようです。) ダイアログが表示され、上記のエラー コードとメッセージが表示されます。これは、たとえば、in_flac.dll および in_mp3.dll プラグイン (Winamp に付属) で発生します。この状況をどのように改善できるかについてのアイデアはありますか?
編集:これは基本的に、ディレクトリ内のプラグインを反復処理し、それぞれをロードしてから解放しようとします。上記のエラーを生成するプラグインもあれば、生成しないプラグインもあります。
delphi - Delphi LoadLibrary DLLの他のディレクトリが見つかりません - 良いオプションはありますか?
2 つの Delphi プログラムが foo.dll をロードする必要があります。これには、クライアント認証証明書を SOAP 要求に挿入するコードが含まれています。foo.dll は c:\fooapp\foo.dll にあり、通常は c:\fooapp\foo.exe によってロードされます。それはうまくいきます。他のプログラムは同じ機能を必要としますが、c:\program files\unwantedstepchild\sadapp.exe にあります。両方の AP が次のコードで DLL をロードします。
dllがすぐそこにあるので、foo.exeに最適です。sadapp.exe はライブラリの読み込みに失敗したため、FOOLib は 0 になり、残りは呼び出されません。したがって、sadapp.exe プログラムはサイレントに証明書の挿入に失敗し、本番環境に対してテストするときに、証明書が見つからない場合、接続に失敗します。明らかに、DLL へのパスを完全に修飾する必要があります。多くの詳細には触れませんが、最近までこの問題を覆い隠していたテストの側面がありました.コードで修正するには基本的に遅すぎます.完全な回帰テストが必要になり、その時間はありません.
窮地に立たされてしまったので、見落としているオプションがないかどうかを知る必要があります。(このリリースでは) コードを変更することはできませんが、インストーラーを微調整することはできます。c:\fooapp をパスに配置すると機能することがわかりました。foo.dll の 2 番目のコピーを c:\program files\unwantedstepchild に直接追加する場合と同様です。c:\fooapp\foo.exe は sadapp.exe が実行されている間は常に実行されているため、Windows がそのように検出することを期待していましたが、明らかに検出されませんでした。同じ DLL が本当に必要であることを Windows に伝える方法はありますか? 多分マニフェストか何か?これは、私が探している一種の「魔法の弾丸」です。自分ができるということがわかっている:
- おそらくインストーラーで、Windows パスを変更します。それは醜いです。
- DLL の 2 つ目のコピーを、不要なステップ子フォルダーに直接追加します。また醜い
- 適切な修正をコーディングしてテストする間、プロジェクトを遅らせます。受け入れられない。
- 他の?
特に「その他」について、ご指導いただきありがとうございます。この問題は必ずしも Delphi に固有のものではないことを理解しています。ありがとう!
c++ - dllからdllをロードしますか?
dllからdllをロードするための最良の方法は何ですか?
私の問題は、process_attachにdllをロードできず、メインプログラムのソースを制御していないため、メインプログラムからdllをロードできないことです。したがって、dllmain以外の関数も呼び出すことができません。