問題タブ [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.

0 投票する
2 に答える
186 参照

.net - .NETDLLとスレッド/個別のインスタンス

クラス「B」と関数「C」の.NETdllがあるとします。

次に、dllを参照するマルチスレッドの.NETプログラムがあります。

各スレッドはクラス「B」をインスタンス化し、関数「C」を呼び出します。インスタンス化されると、クラス'B'はそれ自体のすべての変数をヒープに割り当てます。これらの変数は、関数'C'によって使用されます。

これにより、クラスの個別のインスタンスが作成されますか(つまり、メインプログラムの各スレッドで関数「C」を呼び出しても安全ですか)、または何らかの方法でDLLを動的にロードする必要がありますか。

(言い換えると、.NET DLLはWin32LoadLibrary関数(参照カウント)のように動作しますか。この場合、1つのdllに異なる名前を付けてから、それらをロードして、個別のインスタンスを作成する必要があります。)

0 投票する
3 に答える
1703 参照

c# - cygwinのGCCでコンパイルされたCDLLをC#.NETアプリケーションにロードすると奇妙なクラッシュが発生する

cygwinのGCCでコンパイルされた単純なDLLをC#.NETアプリケーションにロードしようとしています。DLLは次のようになります

関数bar()は42を返します。

DLLをコンパイルしてリンクしました

次に、この非常に単純なDLLをC#WinFormsアプリケーションにロードします。

奇妙なことに、機能する場合と機能しない場合があります。動作しない場合は、foo.dllをロードするとクラッシュします。デバッグモードで実行しましたが、例外も発生しません。デバッガーは、自分で停止したかのように停止します。

また、cygwin1.dllをロードするのと同じスタックフレームにfoo.dllをロードしようとしました。同じこと!

これが発生する理由と、それを機能させるために私ができることについてのヒントはありますか?

アップデート1:最新のcygwinとVisualStudio2010を使用しています。

更新2:タイミングとガベージコレクションに関係していることが前提です。cygwin1.dllをロードしてからfoo.dllをロードするまでの時間が重要であるように思われます。2つのLoadLibrary呼び出し間の時間が短いほど、機能しているように見えます。

更新3:foo.dllの読み込みが最初に成功した場合、セッション中は常に成功します。button1は何度でもクリックできます。

注: LoadLibrary( "foo.dll")は、単にfoo.dllのロードに失敗するわけではありません。それはいいですね。クラッシュし、デバッガーが動作を停止します。例外もスローされません。そして、それは常にクラッシュするわけではありません。時々それはうまくいきます!

0 投票する
1 に答える
4074 参照

delphi - Delphi loadlibrary() のエラー

私は自分のソフトウェア ユーザーに、openfile ダイアログから dll を選択する機会を与えました。すべてが正常に機能しており、dll が私によって提供されているか、無効な dll が選択されていることさえわかります。ただし、ユーザーが名前を変更したファイル (例: apple.dll に名前を変更した apple.txt ファイル) を選択すると、問題が発生します。私はこのようなコードを入力しました

dllHandle を試してください := LoadLibrary( pwidechar(openfiledialog1.filename)) ;

catch { dll でない場合はメッセージを表示します (ただし、任意の dll である可能性があります。後で、これが自分の dll またはサード パーティであることを確認します)}

終わり;

Delphi によって表示されるエラー メッセージは、「不適切なライブラリ イメージが選択されました」です。

ただし、ユーザーが無効な dll を選択すると、独自のエラー メッセージが表示され、攻撃されると、catch が機能しません。

誰か助けてくれませんか、私は Delphi 2009 を使用しています

0 投票する
5 に答える
4246 参照

winapi - LoadLibrary() 呼び出し内のアクセス違反

LabVIEW 内で DLL を呼び出すと、アクセス違反が発生します。DLL を「extcode.dll」と呼びましょう。私はそのコードを持っていません。それは外部の製造業者からのものです。

Windbg で実行すると、次のメッセージで停止しました。

コールスタックは次のとおりです。

アクセス違反の前に、extcode.dll の依存関係が読み込まれることに注意してください。

状況はランダムですが、それが発生すると、後続のすべての試行がそれにつながります。

コードは、DLL 内の関数を呼び出す単純な LabVIEW 関数であり、プロトタイプは非常に単純 ( int function(void)) であるため、呼び出しパラメータの設定ミスやポインタ演算ではありません。呼び出し規約とエラー チェック レベルのすべての組み合わせをチェックしました。

他の環境 (.NET および C) で呼び出された場合、DLL は完全に正常に動作します。

RtlFindClearBitsAndSetビット配列操作に関連していることがわかりました

それはあなたに何を考えさせますか?extcode.dll、LabVIEW、または Windows に問題があると思いますか?

PS: Windows 7 64 ビット (extcode.dll は 64 ビット) で LabVIEW 2010 64 ビットを使用しています。32ビットシステムで再現できませんでした。

11/18 編集

最終的に、DLL をラップするスタンドアロンの exe を作成しました。LabVIEWはパイプを介して通信します。完全に動作しますが、LabVIEW に DLL をロードするとクラッシュする理由がわかりません。

0 投票する
3 に答える
592 参照

c++ - COM オブジェクト DLL ロードの問題

大規模なアプリケーションのプラグインとして使用される Qt DLL に取り組んでいます。この DLL は、悲しいことに同じフォルダーにない他の DLL に依存しているため、現在の作業ディレクトリが正しく設定されている場合にのみ読み込まれます (大規模なアプリケーションがLoadLibraryDLL を呼び出す前に設定します)。私はこの行動を制御できません。

このプラグインに単純な COM オブジェクトを追加するように依頼されましたが、現在の作業ディレクトリが正しく設定されていない限り、サードパーティのアプリケーションで DLL を登録または使用できないという問題がありますLoadLibrary。依存関係がないため、プラグインは失敗します。明らかに、サードパーティのアプリが使用する現在の作業ディレクトリを制御することはできません。この段階では、依存関係を確実に見つけるために PATH を変更することはできません。

依存する DLL に使用しようとし/DELAYLOADましたが、「データ シンボルのインポートが原因で foo.dll を遅延ロードできません...」というエラーで失敗します。繰り返しになりますが、これらの依存 DLL の使用方法を簡単に変更することはできません。

現在、唯一の解決策は、COM オブジェクトを他に依存しないスタンドアロンの DLL に移動することだと思いますが、解決策を見つけて COM オブジェクトをプラグイン DLL に残すというプレッシャーにさらされています。これがどのように可能かわかりませんので、他の誰かにアイデアがあるかどうか見てみようと思いました。システム全体のSetDllDirectory呼び出しの何らかの形式が役立つか、サードパーティのアプリがLoadLibraryプラグインを呼び出したときに作業ディレクトリを設定できるレジストリ ハックが役立ちます。

0 投票する
3 に答える
5189 参照

.net - DLL を複数回ロードして、.Net でマルチスレッドを許可する

私の .Net プログラムは、Fortran Dll を使用して数学関数 (Arpack、固有モードを解く) を実行します。Fortran には静的変数が含まれており、一般にスレッドセーフではないと思います。また、これは非常に複雑であり、スレッド セーフにするにはかなりの労力が必要になるでしょう。Dll はそれほど大きくない (700K) ので、スレッドが同時に動作できるように何度も (たとえば 4 回、または 8 回) ロードしたいだけです。どうすればこれを行うことができるか誰にも分かりますか? LoadLibrary は、複数回呼び出された場合、常に同じハンドルを返すと聞きました。したがって、私の唯一の解決策は、ディスク上に複数の Dll のコピー (Arpack1.dll、Arpack2.dll など) を置き、必要に応じてそれらをロードすることです。かなり恐ろしい。

何か案は?

ユアン

0 投票する
1 に答える
652 参照

android - Android リンク エラー

Ubuntu 10.10 を実行しています

NDK を使用していない

DS-5 (ARM の開発ツールセット、http: //www.keil.com/arm/ds5/ ) で ARM 共有ライブラリをコンパイルしました。それらを libs/armeabi の下に配置して System.loadLibrary() を呼び出すと、それらが見つかりません。

クラスは次のとおりです。

ライブラリの正確な名前は libAddSub.so です

LogCat:

0 投票する
6 に答える
11281 参照

windows - DllMain から LoadLibrary を呼び出す

MSDN は次のように述べています。

LoadLibrary または LoadLibraryEx 関数 (またはこれらの関数を呼び出す関数) を呼び出してはなりません。これは、DLL の読み込み順序で依存ループが作成される可能性があるためです。これにより、システムが初期化コードを実行する前に DLL が使用される可能性があります。

DllMainから呼び出そうとしましたがLoadLibrary、何も起こりませんでした。

唯一の問題は、読み込まれた DLL が、残りの DllMain が実行される前に DLL 内の関数を使用することです。

DllMain で LoadLibrary を呼び出してはいけないのはなぜですか?

編集:

OK、他の信者と同じように MSDN を信じなければならないという理由だけで、DllMain で LoadLibrary を呼び出してはならないことに気付きました(そこで間違ったことをいくつか見ましたが、それらも忘れる必要があります)。
また、新しいバージョンの Windows では何かが起こる可能性があるためです (ただし、過去 10 年間は何も変更されていません)。

LoadLibraryしかし、DllMain で呼び出されたときに何が起こるかを再現するコードを誰かが示すことができますか? 既存の Windows OS では?
別のシングルトン初期化関数の呼び出しだけでなくLoadLibrary、DllMain での呼び出しですか?

0 投票する
1 に答える
4116 参照

python - Python ctypes.cdll.LoadLibrary の動作が 2.6.5 と 2.7.1 で異なる

Python バージョン 2.6.5 と 2.7.1 の両方を備えたシステムを使用していますが、一方の LoadLibrary は機能し、もう一方は機能しないことに気付きました。

そして2.6.5土地の作業中:

Python 2.7.1が機能しない理由を理解する良い方法を知っている人はいますか?

0 投票する
1 に答える
426 参照

windows - 指定されたディレクトリからの dll の静的ロードの強制

私たちのアプリケーションでは、dll ファイルを動的にロードしますが、これも他の dll への静的バインディングを持っています。

これまで、この dll はすべてアプリケーション フォルダーにありました。これからは、これらの dll をディレクトリ構造に移動します。dll をロードするフォルダーは、実行時に決定されます。(バージョニング/動的更新...)

質問 1 : 動的にロードされたライブラリに、特定のフォルダ内の静的にロードされたライブラリを探すように強制する最良の方法は何ですか?

質問 2 : 古いバージョンのライブラリがアプリケーション フォルダに残っている場合、アプリケーション フォルダからスタティック ライブラリが読み込まれないようにするにはどうすればよいですか?

(ところで、これは win32 アプリケーションです...)