問題タブ [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.
c++ - .LIBファイルはC++でDLLを呼び出すために必要ですが、C#P / Invokeでは必要ありませんか?
私はC++からアンマネージDLLを参照する方法についての答えを探していました。
C ++でdllをロードするためのより良い方法はありますか?
また、呼び出し元が.LIBファイルを持っていないと、DLLをC++でロードできないようです。次のように実行時にDLLを動的にロードする場合、.libファイルが絶対に必要であるというのは本当ですか?
上記のコードを使用してLoadLibraryを呼び出すと、結果はNULLになります。GetLastError()のエラーコードは193:ERROR_BAD_EXE_FORMATです。なんで?
編集/更新: 何が問題なのかを理解しました-プログラムのターゲットプラットフォーム(DLLを呼び出す)をx64として使用し、Win32に変更すると、LoadLibraryがNULL以外の結果を返すようになりました。
DLLは、1つのソースファイルexpFns.cppで構成されています。
コンパイル方法は次のとおりです。
unrar3.DLLなどのよく知られたDLLを使用しても、エラーコード193が表示されます。なぜこのエラーコードが表示されるのですか?
一方、マネージドC#でP / Invokeを使用する場合、必要なのは.DLLへのフルパスだけで、.LIBファイルは必要ありません。DLLへの関数呼び出しは機能します。C ++で.LIBファイルが必要なのに、C#では.LIBファイルが必要ないのはなぜですか?
windows - 別のDLLからのLoadLibrary
MSDNで説明されているDLLルックアップパスは次のとおりです。
- 現在のプロセスの実行可能モジュールが配置されているディレクトリ。
- 現在のディレクトリ。
- Windowsシステムディレクトリ。GetSystemDirectory関数は、このディレクトリのパスを取得します。
- Windowsディレクトリ。GetWindowsDirectory関数は、このディレクトリのパスを取得します。
- PATH環境変数にリストされているディレクトリ。
これは次の疑問を引き起こします:
たとえば、あるディレクトリに実行可能ファイルがあり、にc:\execdir\myexe.exe
あるDLLをロードするとしPATH
ますc:\dlldir\mydll.dll
。ここで、mydll.dll
を使用して別のDLLをロードしようとしたとしますLoadLibrary
。最初に確認されるディレクトリはどれですか?c:\dlldir
またはc:\execdir
?
上で引用したルックアップルールは、c:\execdir
「現在のプロセスの実行可能モジュールが配置されているディレクトリ」であると言われているためだと思いますが、別のソースから確認を取得するとよいでしょう。
編集:また、まったくc:\dlldir\
見られていますか?結局のところ、これは.exeが配置されている場所でも、「現在のディレクトリ」(一般的な意味での場合)でもありません。
PS私はWindowsXPと7の両方に興味があります。
c - matlab から dll 関数を呼び出そうとすると、クラッシュが発生する
MATLAB 内でサードパーティの外部 DLL (usbmicro から) を使用しようとしていますが、MATLAB がクラッシュし続けます。これは、C プログラム内からの関数呼び出しの構文を示すドキュメントからのものです。
私はこのMATLABスクリプトを試しました(はい、それは非常に厄介です、私はMATLAB初心者です):
そしてこれ:
どちらの場合も、calllib()
呼び出しによって MATLAB がセグメンテーション違反でクラッシュします。
MATLAB のバージョンは 7.10 です。OSはWindows Vistaです。
アップデート:
libfunctionsview USBm のスクリーンショットは次のとおりです。
ヘッダーファイルは次のとおりです。
アップデート:
この行を変更してみました:
これに:
ヘッダー ファイルで、MATLAB を再起動します。コードを再度実行しましたが、MATLAB は依然としてクラッシュします。
c# - Corflags:16 dllをx86アプリケーションにロードすると、64ビットシステムでクラッシュします
プロジェクトで外部dllを使用しています。64ビットマシンでアプリケーションを実行しようとすると、がクラッシュしFileLoadException
ます。32ビットシステムでは正常に動作するため、dllは32ビットであると思われます。ただし、プロジェクトのターゲットプラットフォームをx68に設定しても効果はありません。
私はc#の64ビットアプリケーションで32ビットdllを読み、64ビットアプリケーションで32ビットDLLライブラリをロードし、アプリ全体を32ビットプロセスとしてビルドする必要があることを示す他のいくつかのページを読みました(これは気になりません-64ビットウィンドウで実行可能である必要があります)、しかし、ターゲットプラットフォームを設定しない場合、64ビット開発マシンで32ビットアプリを構築する方法がわかりません...
コードはただです
QuickFixのものはdllからのものです。
編集: CorFlagsでdllをチェックし、計算しました
これは、dllがi386環境でのみロードできる混合モードアセンブリであることを意味します(http://blogs.msdn.com/b/slessard/archive/2010/04/09/types-of-managed-code -assemblies.aspx)
これを64ビット環境でロードすることは可能ですか?
java - Java:他のライブラリに依存するライブラリをロードする
Javaアプリケーションに自分のネイティブライブラリをロードしたい。これらのネイティブライブラリは、サードパーティのライブラリに依存しています(アプリケーションがクライアントコンピューターにインストールされている場合は、存在する場合と存在しない場合があります)。
私のJavaアプリケーション内で、依存ライブラリの場所を指定するようにユーザーに依頼します。この情報を取得したら、それを使用して、JNIコードを使用して「LD_LIBRARY_PATH」環境変数を更新します。以下は、「LD_LIBRARY_PATH」環境変数を変更するために使用しているコードスニペットです。
Javaコード
Jniコード(C)
また、環境変数をフェッチするための対応するネイティブメソッドもあります。
LD_LIBRARY_PATHを正常に更新できます(このアサーションはCルーチンの出力に基づいています)getenv()
。
まだネイティブライブラリを読み込めません。依存するサードパーティライブラリはまだ検出されません。
ヘルプ/ポインタをいただければ幸いです。Linux64ビットを使用しています。
編集:
ダイナミックローダーが機能しているかどうかをテストするために、SSCE(C)を作成しました。これがSSCEです
Cコードも機能しません。どうやら、ダイナミックローダーはLD_LIBRARY_PATH環境変数を再読み込みしていません。ダイナミックローダーにLD_LIBRARY_PATH環境変数を再読み込みさせる方法を理解する必要があります。
c++ - DLLファイルを読み込めません
DLL (COM) をロードしようとするたびに、次のエラーが発生します。
LDR: LdrpWalkImportDescriptor() がそのマニフェストのプローブに失敗しました、ntstatus 0xc0150002
私はたくさん検索しましたが、何も見つかりませんでした。このサイトの専門家を本当に信じており、この問題を解決できることを願っています。
問題がマニフェスト ファイルにあることはわかっていますが、それが何であるか、これを修正する方法は本当にわかりません
私はVS2010 C++を使用し、LoadLibrary
c# - C# で mfc DLL をロードする
私は C シャープ プログラムにロードしたい mfc dll を持っています!
私のソース チュートリアル: http://blogs.msdn.com/b/jonathanswift/archive/2006/10/03/dynamically-calling-an-unmanaged-dll-from-.net-_2800_c_23002900_.aspx
問題は、ロードする関数でプリミティブ データ型 (int など) を使用していることですが、独自の型 ( getInstance() のクラス オブジェクト) が必要です。
それを行う簡単な方法はありますか?
ありがとう、こんにちはleon22
c++ - C++ の GetProcAddress 関数
皆さん、こんにちは。プロジェクトに DLL をロードしましたが、GetProcAddress 関数を使用するたびに。NULL を返します。私は何をすべきか?「MYDLL.dll」でこの関数( double GetNumber(double x) )を使用します
これが私が使用したコードです:
c++ - Visual C++/qt アプリケーションでのサードパーティ dll のロード
アプリケーションで使用する必要があるサードパーティの dll があります。インターフェイスはサード パーティの dll で定義されているため、アプリケーションからインターフェイスを呼び出す必要があります。インターフェイスの関数プロトタイプはありますが、lib ファイルやヘッダー ファイルはありません。loadlibrary を使用する必要があるようですが、ヘッダー ファイルがなくても可能ですか? そのようなヘッダー ファイルを生成する方法はありますか? 私はまだアイデアを把握しているので、loadlibrary の説明も大歓迎です。ありがとう!
c++ - LoadLibrary が Win7 32 ビットで失敗し、Win XP 32 ビットで成功する
サード パーティの dll (つまり、ソース コードがない) をアプリケーションにロードしようとしています。Windows XP 32 ビット システムでは正常にロードされますが、Windows 7 システムでは、GetLastError() からのエラー #998 を引用してロードに失敗します。
dll エクスポート ビューアーを使用して、インポートおよびエクスポートされた dll のシンボルを表示したところ、インポート テーブルにリストされている 3 つを除くすべての dll が、このサード パーティ ベンダーからのものであることがわかりました。そうではなかったものは次のとおりです
。kernel32.dll
mingwm10.dll
msvcrt.dll
インポートを行うために使用しているコードは次のとおりです。
これをデバッグする方法についてのヒントを教えてください。
編集:答えてくれたみんなに感謝します。これが私がこれまでに発見したことです:
a)アプリケーションツールキットパッケージはそれほど有用であることが証明されていません(以下を参照)
b)同僚Aは、勝利時にdllをロードできます7 マシンと同僚 B はできないので、散発的なものです
c) 管理者として実行しても何も変わりませんでした