ホーム
Top.Mail.Ru Yandeks.Metrika
フォーラム: "Main";
現在のアーカイブ:2002.01.08;
ダウンロード:[xml.tar.bz2];

ダウン

Dll s 似ている枝を探す


HELP ME PLZ   (2001-12-15 18:22) [0]

はじめてDLLを使用してDLL-shkiから関数を呼び出す方法を教えてください



Oleg Gashev   (2001-12-15 18:35) [1]

DLLの呼び出し

トピックグループ

DLLで定義されたルーチンを呼び出す前に、それらをインポートする必要があります。 これには、2つの方法があります。外部プロシージャまたは関数を宣言する方法、またはWindows APIを直接呼び出す方法です。 どちらの方法を使用しても、ルーチンは実行時までアプリケーションにリンクされません。 これは、プログラムをコンパイルするときにDLLが存在する必要がないことを意味します。 また、ルーチンをインポートする試みのコンパイル時検証がないことも意味します。
Object Pascalは、DLLからの変数のインポートをサポートしていません。

静的荷重

プロシージャまたは関数をインポートする最も簡単な方法は、外部ディレクティブを使用して宣言することです。 たとえば、

手順DoSomething; 外部「MYLIB.DLL」;

この宣言をプログラムに含めると、プログラムの起動時にMYLIB.DLLが一度読み込まれます。 プログラムの実行中、識別子DoSomethingは常に同じDLL内の同じエントリポイントを参照します。
インポートされたルーチンの宣言は、それらが呼び出されるプログラムまたはユニットに直接配置できます。 ただし、メンテナンスを簡素化するために、外部宣言を別の「インポートユニット」に収集できます。このインポートユニットには、DLLとのインターフェイスに必要な定数と型も含まれます。 (DelphiのWindowsユニットが良い例です。)インポートユニットを使用する他のモジュールは、その中で宣言されたルーチンを呼び出すことができます。

外部宣言の詳細については、外部宣言を参照してください。
Windows API呼び出しによる動的ロード。




Oleg Gashev   (2001-12-15 18:36) [2]

-------------------------------------------------- ---------------
LoadLibrary

LoadLibrary関数は、指定された実行可能モジュールを呼び出しプロセスのアドレス空間にマップします。

HINSTANCE LoadLibrary(

LPCTSTR lpLibFileName //実行可能モジュールのファイル名のアドレス
);


パラメーター

lpLibFileName

実行可能モジュール(.DLLまたは.EXEファイルのいずれか)を指定するヌル終了ストリングを指します。 指定された名前はモジュールのファイル名であり、モジュール定義(.DEF)ファイルのLIBRARYキーワードで指定されているライブラリモジュール自体に保存されている名前とは関係ありません。

文字列がパスを指定しているが、指定されたディレクトリにファイルが存在しない場合、関数は失敗します。
パスが指定されておらず、ファイル拡張子が省略されている場合、デフォルトのライブラリ拡張子.DLLが追加されます。 ただし、ファイル名の文字列には末尾の文字(。)を含めることができます。これは、モジュール名に拡張子がないことを示すためです。 パスが指定されていない場合、関数は次の順序でファイルを検索します。

1。 アプリケーションのロード元のディレクトリ。
2。 現在のディレクトリ。
3。 Windows 95:Windowsシステムディレクトリ。 GetSystemDirectory関数を使用して、このディレクトリのパスを取得します。

Windows NT:32ビットのWindowsシステムディレクトリ。 GetSystemDirectory関数を使用して、このディレクトリのパスを取得します。 このディレクトリの名前はSYSTEM32です。

4。 Windows NT:16ビットのWindowsシステムディレクトリ。 このディレクトリのパスを取得するWin32関数はありませんが、検索されます。 このディレクトリの名前はSYSTEMです。
5。 Windowsディレクトリ。 GetWindowsDirectory関数を使用して、このディレクトリのパスを取得します。
6。 PATH環境変数にリストされているディレクトリ。



最初に検索されるディレクトリは、呼び出しプロセスの作成に使用されるイメージファイルを含む1つのディレクトリです(詳細については、CreateProcess関数を参照してください)。 これにより、プロセスのインストール済みディレクトリをPATH環境変数に追加することなく、プロセスに関連付けられたプライベートダイナミックリンクライブラリ(DLL)ファイルを見つけることができます。
関数がライブラリモジュールファイルへの完全修飾パスを取得すると、呼び出しプロセスに現在ロードされているライブラリモジュールの完全パスと(独立して)パスが比較されます。 これらのライブラリには、プロセスの起動時にロードされたライブラリと、以前にLoadLibraryによってロードされたものの、FreeLibraryによってアンロードされていないものが含まれます。 パスが既にロードされているモジュールのパスと一致する場合、関数はモジュールの参照カウントをインクリメントし、そのライブラリのモジュールハンドルを返します。



戻り値

関数が成功した場合、戻り値はモジュールへのハンドルです。
関数が失敗した場合、戻り値はNULLです。 拡張エラー情報を取得するには、GetLastErrorを呼び出します。

備考

LoadLibraryを使用してDLLモジュールをマップし、GetProcAddressで使用してDLL関数のアドレスを取得できるハンドルを返すことができます。 LoadLibraryは、他の実行可能モジュールをマップするためにも使用できます。 たとえば、関数は.EXEファイルを指定して、FindResourceまたはLoadResourceで使用できるハンドルを取得できます。
モジュールハンドルは、グローバルまたは継承可能ではありません。 1つのプロセスによるLoadLibraryの呼び出しは、別のプロセスが使用できるハンドルを生成しません



ページ: 1 全枝

フォーラム: "Main";
現在のアーカイブ:2002.01.08;
ダウンロード:[xml.tar.bz2];

2階









メモリ:0.57 MB
時間:0.026 c
3-21949
隠者
2001-12-05 13:22
2002.01.08
現在のレコードの値


1-22146
ミクル
2001-12-19 17:19
2002.01.08
ドットマトリックスプリンターに印刷するときのグリッチ


6-22280
rg
2001-10-06 13:26
2002.01.08
Winpopup(Chat for LAN)からメッセージを受信する方法は?


14-22371
密な
2001-11-08 17:11
2002.01.08
死後の人生?


4-22491
NikRus
2001-11-04 18:09
2002.01.08
キーストロークを傍受することは可能ですか:Ctrl + Esc、Ctrl + Alt + Del





アフリカーンス語 アルバニア語 Arabic アルメニア語 アゼルバイジャン語 バスク ベラルーシ Bulgarian カタロニア語 中国語(簡体字) 中国語(繁体字) クロアチア チェコ語 デンマーク語 Dutch 英語 エストニア語 タガログ語 Finnish フランス語
ガリシア語 ジョージアン ドイツ語 ギリシャ語 ハイチ語 ヘブライ語 ヒンディー語 ハンガリー語 アイスランド語 Indonesian アイリッシュ イタリア語 和風 Korean ラトビア語 リトアニア マケドニア語 Malay マルタ語 Norwegian
ペルシア語 ポリッシュ ポルトガル語 ルーマニア ロシア語 セルビア Slovak スロベニア語 スペイン語 スワヒリ語 Swedish Thai トルコ語 ウクライナ語 ウルドゥー語 ベトナム語 ウェールズ語 イディッシュ語 ベンガル語 ボスニア語
セブアノ語 エスペラント グジャラート語 ハウサ語 モン族 イボ ジャワ語 カンナダ語 クメール語 ラオ語 ラテン マオリ語 マラーティー語 モンゴル語 ネパール語 パンジャブ語 ソマリ タミル語 テルグ語 ヨルバ語
ズールー語
Английский Французский Немецкий Итальянский ポルトガル語 Русский Испанский