delphiのインストール時にコピーされるdllライブラリ。 Delphiでのダイナミックライブラリ(DLL)のバリアントの作成。 歌うDLL関数のレビュー

ゴロフナ / 連絡先

DLL-ダイナミックリンクライブラリは、さまざまなプログラムで独自の機能をフリーズできるため、ライブラリにも動的に接続されます。 ほんの一握りの、さらに重要なことに、ライブラリが作成されると、豊富なプログラムで作成できるようになるのは事実です。 今日のレッスンでは、練習することを学びます dllそしてもちろん、それらを作成してください!
さあ、やってみましょう!

穂軸については、Pershaダイナミックリンクライブラリを作成しましょう。 のVirushaemo デルファイまた、[ファイル]->[新規]->[その他]メニューからすぐに利用できます。
私たちの前に、最後に同じ軸があります:

ダイナミックリンクライブラリリストから選択(2009年より若いバージョンの場合) デルファイアイテムはDLLウィザードと呼ばれます)。

その結果、コードのあるウィンドウよりも少なくなります。ここにないフォームを尊重してください。
今naytsіkavіsheは修理中です。 図書館で最初の手順を書いてみましょう。

ライブラリProject2;
//あなたは、単独で、プログラムが置き換えられたことをすでに覚えています
// dllが作成されると、ワードライブラリが呼び出されます。
//ライブラリとはどういう意味ですか。
使用
Sysutils、ダイアログ、
クラス; // 尊敬! モジュールを指定することを忘れないでください、
//それ以外の場合、コードは実用的ではありません

($ R * .res)
(QIU CHASTINにはDLLコードがあります)

最初のProcedureCall; stdcall; 書き出す;
//Stdcall-スタックに配置されるオペレーターのパラメーター
//右左、標準値で反転
//明確にするために、原則からのエクスポートは省略できます
//プロシージャまたは関数をエクスポートします。

始める
ShowMessage( " dllでの私の最初の手順");

終わり;

DoubleProcedureCall; stdcall; 書き出す;
始める
ShowMessage( " 友達の手続き");
//画面をクリックします
終わり;

FirstCall、DoubleCallをエクスポートします。
//エクスポートされた要素のリストはExportsに保存されます。
//プログラムとしてインポートする方法。

始める
終わり。

ツォムミでは、まだズピニムシャを見せています。 単純なお尻の場合、これで十分です。 すぐにプロジェクトを保存します。特にProject2.dllという名前で保存し、CTRL+F9キーの組み合わせを押してライブラリをコンパイルします。 あなたがdprファイルを保存した父親は、私たちのよく作成されたライブラリである拡張子dllのファイルを持っているという罪を犯しています。 Project2.dllという名前があります

それでは、ライブラリの手順のサイクルについて説明しましょう。 標準スキームの背後にある新しいプログラムを作成します。 私たちの前には特別なものはなく、ただの形です。 Yakusフォルダに新しい補遺を取ります。 Іqiuwフォルダーにコピーします dllライブラリ。 トブト。 の このお尻 Project2.dll

ライブラリの関数を呼び出す方法を選択するのはあなた次第です。 2つの方法とviklikuを使用します。

方法#1
ライブラリにあるプロシージャを呼び出す最も簡単な方法かもしれません。
ライブラリが1つしかない作業者に最適です。

さて、行きましょう...
実装キーワードの後に​​、次のコードが記述されます。

最初のProcedureCall; stdcall; 外部"Project2.dll";
//Project2.dllを置き換えるライブラリの名前である可能性があります

DoubleProcedureCall; stdcall; 外部"Project2.dll";

ここで、あなたがすでに歌っているように推測しているように、私たちはプログラムに私たちの手順に名前を付けるように思い出させています、そして私たちは悪臭が dllライブラリ Project2.dllという名前の私の意見では

さて、これらのプロシージャを呼び出すには、コード内の場所に名前を挿入するだけで、すぐに名前を付けることができます。 [標準]タブからフォームに2つのボタンコンポーネントをスローし、OnClickの下のスキンサンプラーで作成します

最初のボタンのOnClick:


始める
最初の呼び出し;
終わり;

OnClick別のボタン:


始める
ダブルコール; //私はdllにあるプロシージャです
終わり;

私から!

方法2:
折りたたみは最初は低くなりますが、利点があり、より頭が良く、プラグインに最適です。
zastosuvannyaの場合 与えられた方法、私たちは地球規模の変化のスプラットに耳を貸さない:

Var
LibHandle:HModule; //ライブラリモジュールに送信します
FirstCall:プロシージャ; stdcall;
//ライブラリにあるプロシージャの名前。

DoubleCall:プロシージャ; stdcall;

次に、implementationキーワードの後に​​、ライブラリを引き継ぐためのプロシージャを記述します。

ProcedureMyLibrary(FileName:String);をロードします。
始める
LibHandle:= LoadLibrary(PWideChar(FileName));
//ライブラリを入手してください!
// 尊敬! 2009Delphiより前のバージョンのPChar
LibHandle = 0の場合、開始します
MessageBox(0、 ""、0,0);
出口;
終わり;
FirstCall:= GetProcAddress(LibHandle、 "FirstCall");
//オブジェクトのOtrimuemoavka_vnik
//ライブラリモジュールに送信される最初のパラメータ
//dllのオブジェクト名の2番目のパラメータ

DoubleCall:= GetProcAddress(LibHandle、 "DoubleCall");
@FirstCall = nilの場合、開始します

MessageBox(0、 " ライブラリを引き継ぐことはできません",0,0);
出口;
終わり;
@DoubleCall = nilの場合、開始します
//ライブラリ内のこの関数の存在を再検討します。
MessageBox(0、 " ライブラリを引き継ぐことはできません",0,0);
出口;
終わり; 終わり;

フォーム上に何かが作成された場合は、OnCreateポッドのサンプルであり、適切に作成されたプロシージャの助けを借りて、 図書館

プロシージャTForm1.FormCreate(Sender:TObject);
始める
LoadMyLibrary( "Project2.dll");
終わり;

ライブラリから必要なプロシージャを呼び出すために、コードのどこにも名前を挿入する必要はありません。 このために、[標準]タブからフォームにボタンの2つのコンポーネントをスローし、OnClickの下のスキンサンプラーに作成できます。

最初のボタンのOnClick:

プロシージャTForm1.Button1Click(送信者:TObject);
始める
最初の呼び出し; //私はdllにあるプロシージャです
終わり;

OnClick別のボタン:

プロシージャTForm1.Button2Click(送信者:TObject);
始める
ダブルコール; //私はdllにあるプロシージャです
終わり;

さて、私たちはフォーム上にOnDestroyのコピーを作成しています。 dllライブラリメモリから

プロシージャTForm1.FormDestroy(送信者:TObject);
始める
FreeLibrary(LibHandle);
//メモリライブラリを見てください。
終わり;

私から! 面倒なことを書く別の方法ですが、ライブラリに収集されている明確化されたオブジェクトにプラスもあります。

P.S. 他のすべての投稿をサイトに転送したい場合は、新しいビデオレッスン、オーディオポッドキャスト、Delphiの記事を受講してください。
大会に参加して、一歩一歩私たちのチームに参加しませんか?!
サイトへの無料マルチメディアサブスクリプションに直接サブスクライブする
私たちはすでに3500人以上です!

DelphiのバリアントDLL
  • DLLの概念
  • Delphi DLLの作成(エクスポート)
  • Delphi DLL wiki(インポート)
  • データを処理するためにVCLオブジェクトをハッキングするDLL
  • DLLの状況を非難する
  • DLLの概念

DOSでのプログラミングプロセスを理解しましょう。 プログラムの出力テキストをマシンコードに変換します。これには、コンパイルとリンクの2つのプロセスが含まれます。 リンクの過程で、リンクの編集者、何を構成するか Okremіモジュールプログラムのコードをオープン関数とプロシージャとして配置することにより、プログラムと新しいコードを作成します。 あなたはこの方法で1つのプログラムを準備し、別のプログラムを3番目に準備しました...私はクワイエット関数自体のコードをスクレイピングし、それらを再びプログラムに配置しました。

Program1 Program2 :: MyFunc(:) MyFunc(:) ::関数コードMyFunc関数コードMyFuncその他の関数コードその他の関数コード

仕事が豊富なメディアの場合、このようなpidhidは無謀ではなく、同じ機能の数が多いことは明らかです。これは、coristuvachのインターフェースの要素の乱交、システムリソースへのアクセスなどを考慮したものです。 b povnistyuをすべての補遺で複製しました。これにより、最も高価なリソースである運用メモリがスウェーデン語で使用されることになります。 ダイナミックリンクの概念は、Vinylと同様に、問題の頂点としてUNIXライクなプラットフォームに広まりました(図2)。

しかし、なぜダイナミックリンクライブラリ(DLL)が優れたプログラムのように見えるのでしょうか。 これを理解するには、タスク(task)、プログラム(instance)のインスタンス(copy)、モジュール(module)の理解を明確にする必要があります。

1つのプログラムの複数のインスタンスを起動する場合、Windows zavantazhu 運用メモリコードとリソースの1つのコピー-データのokremihセグメントのリスト、スタック、および詳細のリスト(div。図3)を作成するプログラムモジュール。そのスキンは一連のタスクであり、rozumіnіにあります。ウィンドウズ。 プログラムコピーは、プログラムモジュールが配置されているコンテキストです。

DLL-ライブラリもモジュールです。 これは単一のインスタンスでメモリに保存され、そのリソースのコードセグメントとデータセグメントを置き換えます(図4を参照)。

DLL-ライブラリ DLLに配置された関数は、スタックによって呼び出されるプログラムのコンテキストに配置されます。 エールtіnіkіїїvykoristovuyutセグメントdanihschonabіbrіtetsі、kopiїプログラムではありません。

この組織のおかげで、DLLメモリの節約はすべてのアカウントに到達します 実行中のプログラムすべてを含まない1つのDLLモジュールをハックする 標準機能モジュールの倉庫に移動します。

多くの場合、DLLとして、Pascalでモジュール(ユニット)が概念的に計画される方法と同様に、同じまたは他の論理機能の背後にグループ化された関数のセットがいくつかあります。 Pascalモジュールの関数は静的にリンクされていることに注意してください-リンク段階で、DLLの関数は動的にリンクされ、次に実行時にリンクされます。

Delphi DLLの作成(エクスポート)

Delphi DLLをプログラムするには、一連のシリーズが必要です キーワードそれが構文を支配しました。 Golovne-DelphiのDLLは、プログラム自体のようなプロジェクトです。

DLLテンプレートを見てみましょう。


このようなテンプレートのプロジェクトファイルは、MYDLL.DPRにすることができます。

残念ながら、Delphi IDEはプログラムプロジェクトを自動的に生成しないため、DLLプロジェクトを手動で準備する必要があります。 Delphi 2.0では、不透明度が削除されました。

プログラムと同様に、DLLでも、現在のディストリビューションはを使用します。 neobov'yazkovayaのInitsializatsiyna部分。 輸出の分配では、機能が逆になり、外部補遺の変動が原因でアクセスが非難されます。

関数(およびプロシージャ)のエクスポートは、さまざまな方法で実行できます。

  • 番号(インデックス)
  • 名前で

次のように異なる構文があります。


WindowsはDLLの「常駐関数」を理解しているため、メモリ内で長い間知られているこれらの関数はメモリ内にDLLを持っているため、Delphiにはこの種のエクスポートを整理するためのツールがあります。


次に、エクスポートされる関数のインデックス付けはDelphiによって自動的に分類され、そのようなエクスポートは、関数名と一致する名前によるエクスポートと見なされます。 ただし、プログラム内の有声インポートされた関数は、DLL内の有声関数の名前によって上書きされる場合があります。 インポートされた関数に既にスーパーインポーズされているディレクティブについては、以下で説明します。

Delphi DLL wiki(インポート)

輸入の整理のために、tobto。 DLLからエクスポートされた関数へのアクセス。したがって、それらをエクスポートする場合と同様に、Delphiは標準ツールを使用します。

その他のアプリケーションの場合、プログラムはDLLからインポートされる関数を次の順序で示す必要があります。


この方法は静的インポートと呼ばれます。

覚えているかもしれませんが、DLLを復讐するためのファイルの拡張子は示されていません。プロモーションでは、*。DLLファイルと*.EXEファイルが使用されます。 ただし、ファイルをさらに拡張できる場合(たとえば、DelphiのCOMPLIB.DCL)、または動的に割り当てられたDLLとインポートされた関数が必要な場合(たとえば、プログラムが異なるもので動作する場合) グラフィック形式スキンzの場合、それらはokrema DLLです。)?

このような問題を解決するには、Windows APIに直接アクセスして、次のように動的インポートを呼び出します。


使用 WinTypes、WinProcs、...; タイプ TMyProc = 手順 ; varハンドル:THandle; MyImportProc:TMyProc; 始める Handle:= LoadLibrary( "MYDLL"); もしもハンドル>=32 それから (もしも 始める@MyImportProc:= GetProcAddress(Handle、 "MYEXPORTPROC"); もしも MyImportProc nil それから ... (インポートされたプロシージャを使用) 終わり; FreeLibrary(Handle); 終わり;

エクスポート/インポートの耳をつんざくような、DLL出口点の変更、およびその他のアプリケーションの構文図。21日」。

コンパイラコード生成について話さない場合(同時により多くの最適化があります)、BorlandPascal7.0と同じようにすべての構文ルールが失われます。

データを処理するためにVCLオブジェクトをハッキングするDLL

独自のダイナミックライブラリを作成すると、他のDLLの機能をツイートできます。 このようなDLLの例は、Delphi(X:\ DELPHI \ DEMOS \ BD \ BDEDLL)によって提供されます。 このDLLには、テーブルのデータを表示し、独自の方法でBDE関数を呼び出すVCLオブジェクト(TTable、TDBGrid、TSession)によるデータへのアクセスを許可するフォームがあります。 そのようなDLLの場合、最初のお尻へのコメントに怒鳴る方法єobmezhennya:їїは1時間vikoristovuvavatkіlkazavdanできます。 DBモジュールが接続されると自動的に作成されるSessionオブジェクトは、タスクではなくモジュールに対して初期化されることに注意してください。 別のプログラムでDLLを取得しようとする場合は、ご容赦ください。 zabіgannyaの場合、1時間のzavantazhennuyuDLLdekіlkomzavdannymはzdіysnitideakіdіїする必要があります。 さらに、他のタスク用に現在選択されているDLLを確認する手順があります。

DLLの状況を非難する

Delphiで作成されたDLLの障害状況は、すべてのプログラムの障害状況の前に発生したため、DLLの途中で状況が一般化されることはありませんでした。 そのためには、DLLの開発時に考えられるすべての否定性を転送する必要があります。 行または数値iを確認するために、インポートされている選択した関数の結果をローテーションすることをお勧めします。必要に応じて、プログラムの障害状況を再計算します。


働き MyFunc: ストリング; 始める 試す (クリア機能コード) それ外 の上 EResult:例外 行う結果:= Format(DllErrorViewingTable、) そうしないと結果:= Format(DllErrorViewingTable、["不明なエラー"]); 終わり; 終わり;

プログラムコード:


StrResult:= MyFunc; もしも StrResult "" それから 高める Exception.Create(StrResult);

Stattya DelphiのバリアントDLL配布 ファイルシステム DLLとプラグインはDelphiとFreePascalの小売業者に使用できます。

略語 DLL「動的に動くライブラリ」を意味します。 DelphiのDLL作業に必要なtseファイル コンピューターソフトウェアプログラムがvikonannyaの段階で停止する手順と機能。

必要なすべてのサブプログラムをプログラムタイプで記述できることが与えられたため、追加のサブプログラムを作成する必要があります。 dllファイルそのzadnuvatisyaはvikonannyaの1時間彼と一緒ですか? より多くのgnuchkostのためのローブ 作成されたプログラム。 時間の経過とともに、一部のデータ処理アルゴリズムが変更される場合があります。 プログラムの種類によって処理手順が少なくなるため、ファイルを再コンパイルして受信者に再送信する必要があります。 小さなdllファイルを転送します。これはいくつかの手順で実行できます。これははるかに簡単で、自動モードで実行されます。

さらに、ロボットライブラリdllzovsіmは、それが作成されるプログラムの言語に依存していません。 したがって、私たちのプログラムのdllの作成は、のような悪臭を放つプログラミング言語を気にすることなく、サードパーティの小売業者に委託することができます。 それでも、明らかに、完成したプロジェクトの作成と代理人への転送を大幅に促進します

DLLの作成

Delphiでのdllの作成追加のモジュールを作成するために折りたたまれていません。 コマンド[ファイル]->[新規]->->[その他...]を入力します。表示されるダイアログボックスで、DLLウィザードアイコンを選択します。 その結果、DelphiはDLLライブラリプロジェクトを作成します。

図書館プロジェクト1;

(DLLメモリ管理に関する重要な注意:ShareMemは
ライブラリの最初のユニット「USES句とプロジェクト」(選択
Project-View Source)DLLがプロシージャをエクスポートする場合はUSES句、または
文字列を渡す関数は、パラメーターまたは結果関数です。 これ
DLLとの間でやり取りされるすべての文字列に適用されます。
レコードとクラスにネストされています。 ShareMemはへのインターフェースユニットです
BORLNDMM.DLL共有メモリマネージャー。これは、一緒に展開する必要があります。
DLLを使用します。 BORLNDMM.DLLを強調表示するには、文字列情報を渡します
PCharおよびShortStringパラメーター。 )。

使用
sysutils、
クラス;

($ R * .res)

始める
終わり
.

新しいdllライブラリの名前を選択し、コマンドを入力してokremフォルダーに保存します ファイル -> 名前を付けて保存... papsには4つのファイルがあり、中間のdllファイルはありません。 シンプルに聞こえます テキストファイル、プロジェクトの説明をどうするかdllライブラリのサブバッグファイルを作成するには、プロジェクトをコンパイルする必要があります。 チームをウィック 事業 -> プロジェクトのコンパイル。 その結果、dllファイルがフォルダに表示され、メインプログラムがロードされます。

ライブラリはまだ空です。

...現在、テキストは編集段階にあります...



エントリ

プログラミング技術の激動の発展と関連して、ますます多くの人々が彼らのプログラムの可能性を増やすという問題に苦しんでいます。 この記事は、パワー自体と、それ自体、つまりBorlandDelphiからのDLLのプログラミングに専念しています。 さらに、一部のDLLライブラリの能力を推進しているのと同じように、他の人のDLL(WinAPIなどのシステムのものを含む)からの関数のインポートも同時に推進しています。

DLLのスタック領域

Otzhe、今あなたはDLLライブラリと悪臭を放つvikoristovuyutsyaが必要ですか? Pererakhuemolessdeakіzareasїхzastosuvannya:

Okremіライブラリ 追加機能。 たとえば、行で作業するための関数や、画像を変換するための折りたたみライブラリ。 リソーストレジャーDLLは、プログラム関数、およびさまざまなリソース(アイコン、小さなもの、行配列、メニューなど)として使用できます。 ライブラリのサポート例として、DirectX、ICQAPI(API for ICQ)、OpenGLなどのパッケージのライブラリを追加できます。 プログラムの一部たとえば、DLLからプログラムウィンドウ(フォーム)を保存することもできます。 プラグイン プラグインは、機能を拡張するプログラムへの追加です。 たとえば、この記事では、ホストプログラム用のプラグインの作成の理論を見ることができます。 DLL(ダイナミックリンクライブラリ)リソースの共有は、プログラムまたはプロセスによって複数回に分割できます(いわゆる共有-共有されるリソース)

ロボットDLLの機能とアプリケーションの簡単な説明

では、その機能をどのように受け入れますか? ライブラリから関数をインポートする2つの方法を見てみましょう。

片道 DLLをプログラムにバインドします。

DLLからインポートされた関数を見つけるための最も簡単で簡単な方法。 ただし、(注意のために)このメソッドはさらに厄介な場合があります-ライブラリのように、ウィザードプログラムのように、見つからない場合、プログラムは単に起動せず、許しを見て、DLLリソースであることを思い出させます見つかりませんでした。 そして、ライブラリを検索して、ストリーミングカタログ、ソフトウェアカタログ、WINDOWS\SYSTEMカタログなどを確認します。 Otzhe、穂軸のために-私が受け入れる形:


FunctionName(またはProcedureName)-プログラムで使用される関数(またはプロシージャ)の名前。 Par1、Par2、...プロシージャの関数内のパラメータの名前。 Par1Type、Par2Type、...関数またはプロシージャのパラメータのタイプ(たとえば、整数)。 回転するReturnType値タイプ(関数のみ)。 stdcallディレクティブ。これは、DLL自体のspіvpadatizvikoristovuvanoyの障害です。 既存のDLLの名前を指定する外部の「DLLNAME.DLL」ディレクティブ。この場合、関数またはプロシージャがインポートされます( この特定のタイプに-DLLNAME.DLL); name "FunctionName"( "ProcedureName")ディレクティブは、DLL自体の関数の正確な名前を指定します。 これはneobov'yazkovaディレクティブです。これにより、プログラム関数(名前を付けることができます)を獲得して、それがtrueであると見なすことができます(ライブラリにある場合と同じように)。 index FunctionIndex(ProcedureIndex)DLL内の関数またはプロシージャの序数を示すディレクティブ。 Tseもneobov'yazkovaディレクティブ。

これは、豊かに折りたたまれたエールとエレガントな方法です。 最初の方法への譲歩。 受け入れられない唯一のことは、この受け入れの実装に必要なコードと、DLLからインポートされた関数が、DLLがキャプチャされてメモリに認識された場合にのみ利用可能になるという事実の複雑さです...遠い - 簡単な説明 WinAPI関数メソッドを使用してCIMをウィッキングします。

LoadLibrary(LibFileName:PChar)は、指定されたLibFileNameライブラリをメモリから取得します。 正常に完了すると、関数は(THandle)DLLハンドルをメモリにローテーションします。 GetProcAddress(Module:THandle; ProcName:PChar)は、エクスポートされたライブラリ関数のアドレスを読み取ります。 正常に完了すると、関数は関数のハンドル(TFarProc)をキャプチャされたDLLに変換します。 FreeLibrary(LibModule:THandle)は、アンデッドのLibModuleを操作し、それを覚えておくのを忘れないでください。 次のステップは、ライブラリ関数プロシージャの呼び出しが使用できなくなったことを示すことです。

そのお尻を練習する

さて、今、最良の方法と実践のいくつかの例をもたらす時が来ました:

例1.DLLをプログラムにバインドする


今は同じですが、方法が異なります-動的な関心があります:


ノート:

ライブラリ関数の文字列型に一致するようにスライドするため、 ヨガvikoristannііsnuyut問題z「rozpodіl記憶」。 Delphiが作成しているDLLプロジェクトの空のテキスト([ファイル]->[新規]->[DLL])で、それに関するレポート(true、英語)を読むことができます。 したがって、PCharをすばやく変換し、必要に応じて文字列関数StrPasに変換できます。

それでは、DLLライブラリを見てみましょう。

ケース3。MYDLL.DPRプロジェクトへの参照


DLLリソースとフォームへの配置

DLLは、関数、カーソル、小さなもの、アイコン、メニュー、テキスト行として配置できます。 私たちは私たちが何であるかについて唸りません。 リソースがDLLをキャプチャする必要があることを尊重したいと思います。記述子を削除したbuvは、同様の関数(LoadIcon、LoadCursorなど)を使用してリソース自体をキャプチャします。 viconプログラムのDLLライブラリ(これらのフォームはDelphiにあります)の配置の少し以上を配布した人のために。

新しいDLLを作成し、それに新しいフォームを追加する必要がある人([ファイル]->[新規]->[DLL]、[ファイル]-> [新しいフォーム])。 Dalі、フォームがダイアログウィンドウ(モーダルフォーム(bsDialog))であるように、それをDLLに追加します 機能する(フォームがForm1と呼ばれ、そのクラスがTForm1であるとしましょう):

例4.DLLでのフォームの配置


非モーダルフォームをDLLに追加するには、フォームを開く関数と閉じる関数の2つの関数を追加する必要があります。 DLLを変更する必要があるときはいつでも、フォームハンドルを覚えておいてください。

プラグインの作成

ここでは、プラグインについて詳しく見ていきます。 それを指摘すると、DLLプログラミングの左側に簡単に移動するのに役立ちます。 プラグインは、その機能を拡張するプログラムへの追加だと思います。 この場合、プログラム自体がそのような追加の存在をobov'yazkovo転送し、彼らが彼らの告白をvikonuvatすることを可能にすることができます。

たとえば、Tobtoは前にプラグインを作成します グラフィックエディタ、画像を変換したら、プラグイン内の少なくとも2つの関数を転送する必要があります(つまり、明らかにプログラム内の関数を呼び出す)-b im'yaプラグイン(i /またはioタイプ)を追加するようにした関数メニュー(またはツールバー)へのこのプラグイン、および 主な機能-画像の送受信。 トブト。 プログラムは最初からプラグインを検索し、見つかったスキンについては、名前の名前(たとえば、GetPluginName)から関数をクリックし、メニューに必要な項目を追加します。次に、できるだけ早く、この項目を選択することにより、他の関数を呼び出して、入力Iファイルに渡すかのように、画像を選択します)、この関数は、独自の方法で画像を修正し、新しい外観に回転します(それ以外の場合は、新しい画像を含むファイル)。 Axisとプラグインの本質...

エピローグ

この記事では、BorlandDelphiからのDLLライブラリの選択の主な側面を示します。 あなたが食べ物を持っているなら-それを私にEメールで送ってください:

真ん中で Delphiプログラミング DLLライブラリのスウェーデン語の作成に移行します。

関数を復讐するために、歌うためのライブラリを作成しましょう

GetArea(a、b、c:REAL):REAL。

機能の目的で、tricoutnikの両側が入り口で提供されます。 この関数は、特定のトリコットの領域を回転させます:

p:=(a + b + c)/ 2;

結果:= SQRT(p *(p-a)*(p-b)*(p-c))

スタートDエルフィ、しかし距離は型破りでした。 メニュー項目Fを選択しますileNewOそこ、vіknі、schovіdkrylos、ブックマークNewアイコンDLLWをクリックしますizard. (バージョンにデポジットするアルゴリズム)

DLLライブラリ準備ファイルが作成される場所。 Vіnはすでに最大のモジュールに似ています(単位)Dエルフィ、オペレーターのみに依存しますとしょうかん。 将来的にはDLLライブラリを使用するため、プロジェクトを保存します。たとえば、入手する。 名前GetArea勝つことは不可能です-それはすでにそれらの機能によって占められています。

今オペレーターの後使用法関数のテキストを記述しますが、タイトルにいくつかの変更を加えています。

FUNCTION GetArea(a、b、c:REAL):REAL;書き出す;

EXPORTキーワードは、この関数がエクスポートされ、既存のプログラムから表示されることを示します。

関数のテキストが割り当てられた後

GetArea;

EXPORTSステートメントでは、ライブラリーからエクスポートされたすべてのプロシージャーおよび関数が引き換えられます。 これは私たちの図書館の一種のカタログです。

vikonannyaでライブラリを起動することは不可能です。コンパイルすることしかできません。 メニュー項目「プロジェクト」→「ビルド」を選択できます。 すべてが正しく生成されると、geta.dllという名前のファイルがストリーミングディレクトリディスクに作成されます。 Tseiєライブラリ。

敬意を表する注:ライブラリーにあるプロシージャーおよび関数、STRING型のパラメーターを渡すときに役立つ微妙な点。

STRING型にパラメーターを渡すことができるようにするには、USESステートメントとライブラリー、およびそれを呼び出すプログラムで、ShareMemモジュールの接続を記述し、モジュールがリストの最初になるように言語をドラッグします。 さらに、同時に、ライブラリから、ファイルborlndmm.dll(Delphi配信に含まれています)を追加できます。 この状況を取り除くのは簡単です。テキストタイプのパラメーターに従って、ShortStringデータタイプ(メイン文字列、または最大255文字)とPChar(テキスト文字列のインジケーター)を選択します。

Viklik dll

DLLからプロシージャと関数を呼び出す2つの方法を説明します。 そもそも、私たちはプログラムの開発段階で、DLLをそれに接続することを知っています(ほとんどの場合、私たち自身でDLLを作成します)。 別の方法では、「外部」を含むかなり大きなライブラリに接続します。

静的呼び出し

最初のメソッドの実装については、 静的呼び出し、新しいデフォルトプログラムを作成し、フォーム、ボタン、およびTlabelコンポーネントに3つの入力フィールドLabeledEdit1…LabeledEdit3を配置します。 IMPLEMENTATIONステートメントの後に、geta.dllライブラリからGetArea関数が確実にインポートされるようにする行を追加します。

関数GetArea(a、b、c:実数):REAL; 遠い; 外部「下駄」;

EXTERNALという単語は、関数の本体がライブラリ内にあり、名前が割り当てられていることを示します。FARという単語は、zastosuvannyaの「double」chotiribayteアドレスを指定します。これは、必要な、呼び出されるプログラムの画面です。同じ側​​にある図書館-英語で。 ご覧のとおり、geta.dllファイルは、すべてのストリームプログラムファイルが配置されているのと同じディレクトリに配置する必要があります。

ボタンを押すルーチンでは、配列を作成してライブラリ関数に渡し、結果を画面に表示する必要があります。

プロシージャTForm1.Button1Click(送信者:TObject);

©2022androidas.ru-Androidのすべて