問題タブ [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 投票する
1 に答える
870 参照

matlab - matlabのcalllibで「関数の戻り値の型がサポートされていません」というエラーはどういう意味ですか?

matlab から外部 DLL にアクセスするために calllib を使用しています。DLL には関数が含まれており、署名は次のようになります。

これをmatlabで呼び出そうとすると、

エラーが発生します:

驚いたことに、Google はそのエラー メッセージにヒットを表示せず、calllib のドキュメントには何もありません: http://www.mathworks.com/help/techdoc/ref/calllib.html

私の推測では、関数が構造体を返しているため、matlab が吐いているということです。しかし、ドキュメントにはそれを示唆するものは何もありません。ただし、matlab が提供する例はどれも、出力変数として構造体を含みません。

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

c++ - MFC APP で、「InitInstance」から「LoadLibraryA」を呼び出すと、「InitInstance」が何度も呼び出されます

VS2008 ウィザードを使用して MFCApp を作成しました。アプリケーションの「InitInstance()」内で、いくつかの dll ファイルをロードする必要があるため、「LoadLibraryA()」メソッドを呼び出しています。しかし、「LoadLibraryA()」を呼び出すとすぐに、アプリケーションの「InitInstance()」が再び呼び出されるため、無限再帰になります。私が間違っていることはありますか?

コール スタック:

「Def.dll」はその他の dll であり、MyApp とはまったく関係ありません。この場合、別の dll "CORE.dll" をロードしようとしています。

私が理解できるのは、InitInstance ルーチンが終了する前に LoadLibrary を呼び出しているということだけです。InitInstance の後に呼び出される他の (オーバーライド可能な) メソッドはありますか? もしそうなら、LoadLibrary 呼び出しをそのメソッドに移動してみることができます...

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

delphi - Delphi 2010: Delphi からバイナリを実行すると DLL がロードされない

次のように、Delphi プロジェクトから LoadLibrary を使用して DLL をロードしています。

DLL が存在するディレクトリは、Windows PATH 環境変数に含まれています。このプロジェクトを Delphi 内から実行すると、DLL がロードされません。ただし、同じコードを Windows から直接実行すると、DLL は完全に読み込まれます。

ここで何が欠けていますか?[ツール] -> [オプション]、[環境オプション] -> [Delphi オプション] -> [ライブラリ] - [Win32] -> [ライブラリ パス] にディレクトリを追加して、Delphi に DLL のディレクトリを調べるように明示的に指示しようとしました。(完全な PEBKAC のように感じます。近い将来、自分自身が恥ずかしくなることを予期しています :) ...)

前もって感謝します!

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

dllimport - WOW64 リダイレクトと LoadLibrary

64 ビット Windows で正しく実行できる 32 ビット プログラムをビルドしようとしています。つまり、ユーザーのためにテキスト ファイルを開く必要がある場合、ファイルをからにリダイレクトする必要はありません。ただし、 を呼び出すだけでは、プログラムのロードにまったく失敗します。これは、GUI の一部がロードされているときに一部のシステム ライブラリが呼び出され、システム DLL の 64 ビット バージョンをプログラムにロードしようとするためです。C:\Program FilesC:\Program Files (x86)Wow64DisableWow64FsRedirectionLoadLibrary

この問題を解決するにはどうすればよいですか?


編集:

以下のスクリーンショットで問題を確認してください。


編集2:

問題を解決する別の質問があります: プロセス内の任意のスレッドまたはプロセス全体に対して WOW64 リダイレクトを無効にする方法はありますか?

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

c++ - C++: インストーラーがアプリケーションのリソース DLL の読み込みを拒否する (モジュールが見つからない) [XP のみ]

基本的に、私たちのソフトウェアが の下で実行されるときWindows 7、それは機能します: への呼び出しがLoadLibrary()成功し、人生は良いものになります。

しかし、同じソフトウェアがXPボックス (最新のパッチ) で実行されている場合、 の呼び出しは失敗し、を指定するエラー コードで がLoadLibrary返されます。 NULLmodule not found

アプリ のバージョンではなくUNICODEバージョンを使用するように強制しようとしました。LoadLibraryWLoadLibraryA

インストール フォルダーがローカル ドライブ文字を介してマップされていることを確認してみました。

そして、パス名が実際に実行中のマシンからアクセスできることを確認しました (つまり、生成されたエラーは、ロードしようとしているパスを示し、その文字列を使用して実際にファイルを見つけます)。

奇妙なことに、このコードは でコンパイルすると正しく実行されVS 2008 SP2ます。

クライアント マシンが の場合も問題なく動作しますWindows 7

VS 2010コンパイルされてリンクされ、クライアントで実行された場合にのみ失敗しXPます。

世界で何がうまくいかないのか、私は完全に途方に暮れています。

シチューに奇妙さを加えるには:

開発ボックスを起動し、このコードを の下XP VMのデバッグ ビルドで実行すると、正しく動作します。 VS2010XP

実際、私の の下ではXP VM、標準 (リリース) ビルドも正しく実行されます!!!

失敗するのは、真のXPボックスから実行したときだけです(これまでにいくつかのマシンを試しましたがXP、両方とも完全にパッチが適用されています)。

何かご意見は?!
私は信頼できるアイデアを使い果たし始めています。:(

0 投票する
4 に答える
4374 参照

winapi - x64 環境で 32 ビット DLL を使用するには? x86 コンパイルを強制することはできません。

VC++ 2008、CLR コンソール アプリ、win7 x64 で開発中。

私は MS Office v.12 PIA で .net を使用して Excel の自動化を行っていますが、これは非常にうまくいっています。しかし今、単純な電子メール トランザクションを実行するコードの次の部分を開始しているので、コードで MAPI を動作させようとしています。基本的に、適切なレジストリ キーを読み取って OLMAPI32.DLL ファイルへのフル パスを取得し、その dll 内から LoadLibrary/GetProcAddress を試みます。

ここにスニペットがあります:



LoadLibrary がシステム エラー 193「%1 は有効な Win32 アプリケーションではありません。」いくつかの調査を行った後、x86 コンパイルを強制するだけでよいことがわかりました。そこで、Configuration Manager に移動し、[アクティブなソリューション プラットフォーム] で、[Win32]、[新規]、および [編集] のみを選択します。そこで、[新規] をクリックし、[新しいプラットフォームを入力または選択] の下に「x86」と入力し、[設定のコピー元] をクリックして [任意の CPU] または適切なものを選択しますが、私の唯一の選択肢は Win32 です。すでに .net をターゲットにしていたためかもしれないと考えたので、その理論をテストするために、今回は Win32 コンソール アプリとして新しいプロジェクトを開始しました。そのタイプのプロジェクトでも、私の唯一の選択肢は Win32 です。私が聞いた x86、x64、Any CPU、および Itanium は、私の VS2008 には存在しません!

だから私はここで途方に暮れています。mapi インターフェイスを使用できるように、VS に exe を x86 としてコンパイルさせるにはどうすればよいですか? または、使用できる OLMAPI32.DLL の 64 ビット バージョンはありますか? MAPI 用の 64 ビット ライブラリがなく、x86 用に環境をセットアップしようとすると VS がヘッドライトを提供する場合、コードで MAPI を動作させるにはどうすればよいでしょうか。私の 64 ビット環境が自動的に MAPI の使用資格を失うとは信じられません。

ありがとう

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

dll - LoadLibraryが失敗し、モジュールが見つかりませんエラー-依存関係の問題の可能性

私はC++を使用して32ビットdllをロードしようとしています(32ビットアプリケーションから、Windows 7 64ビットで)。LoadLibraryはNULLを返し、GetLastErrorは「指定されたモジュールが見つかりませんでした」に対して126を返します。

LoadLibrary関数に完全なアドレスを渡します。Dependency Walkerでdllを開きましたが、GPSVC.dllには依存関係がありませんでした。

私が行ったグーグルから、Dependency WalkerはこのGPSVC.dllを欠落している依存関係として誤って表示することが多く、32ビットバージョンがないため、それが実際の問題ではないと思います。

私は過去にdllをあまりいじくり回したことがないので、うまくいけば、それは私が学ぶことができる比較的単純な問題です。

助けてくれてありがとう!

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

winapi - LoadLibrary("MyDll.dll") を使用してロードされた dll へのパスを取得します

次のような名前を使用してdllをロードしています:

HANDLE hlib = LoadLibrary("Winfax.dll");

ここで、dll がどのパスからロードされたかを知りたいと思います。dll ハンドルのフル パスとファイル名を取得する方法はありますか?

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

c# - .net 4.0がインストールされていない場合に.net 4.0 dllをロードするC++ CLR

C++ で記述され、VS 2010 でコンパイルされたアプリケーションがあります。C# で記述され、.net 4.0 プラットフォーム用にコンパイルされた .net dll を c++ コードからロードし、いくつかの関数を呼び出す必要があります。.net 4.0がシステムにインストールされなくなるまで、C++ CLRとその呼び出し.net関数を使用してこれを既に行っています。

.net 4.0 がインストールされていない場合、関数呼び出しによって C++ コードで SEH 例外が発生しますが、ライブラリの読み込みは成功します。毎回例外コードは同じ 0xE0434F4D です。

質問:

  1. ロードされた dll のターゲット .net プラットフォームを C++ コードから特定し、そのプラットフォームがシステムにインストールされているかどうかを特定することはできますか?
  2. SEH例外を防ぎ、人間が読めるエラーの説明を表示する方法が他にあるのでしょうか?

前もって感謝します

0 投票する
4 に答える
13154 参照

c++ - LPCTSTRを取得するLoadLibrary

LoadLibraryを使ってプラグインシステムを開発したい。
私の問題は次のとおりです。関数にaを取り、をconst char*取りLoadLibraryたいLPCTSTR
私は、モジュールが見つからないというエラーを出し続け たという素晴らしいアイデアを思いつきました。 現在のコードは以下の通りです。行のコメントを外すと、正常に機能します。MFCを使用してソリューションを読みましたが、MFCを使用したくありません。(LPCSTR)path

widepath = L..

現在のコード: