要件:最近そのようなプロジェクトを受け取ったため、党Aなどは、開発したPB開発アプリケーションに既に持っている機能を追加するように依頼しました。唯一の目的は、2つのEXEアプリケーションを持たないことです。
解決策:DelphiのアプリケーションをDLLの形でパッケージし、PBで呼び出します。
デザイン:
1。PBパーツ
1.新しい非視覚クラスN_CST_DEMOを作成すると、同じモジュールからすべての呼び出しをこのクラスに入れます。
2。API呼び出しを定義します。宣言の定義---ローカル外部関数
//ハンドル:現在のウィンドウのハンドル:その他の必要なパラメーター
Subroutine show_demo(ulongハンドル、文字列param)ライブラリ「project1.dll」
3.新しいフォームw_mainを作成します。
4.新しいメニューM_DLLを作成します。
5.テストDLLと呼ばれるメニュー項目を作成します。クリックされたイベントに書く:
N_CST_DEMO N_PDA n_pda = create n_cst_demo n_pda.show_demo(handle(parentwindow)、 "abcd1234") N_PDAを破壊します |
このようにして、PB部品が完了しました。
2。Delphiパート
1.新しいDLLプロジェクトを作成します。
2。新しいフォームを作成します1。保存。3。プロジェクトにコードを書き込む:
ライブラリProject1; 用途 sysutils、 フォーム、 窓、 クラス、 コントロール、 ダイアログ、 'unit1.pas' {form1}のunit1 'dm.pas' {datamodule1:tdatamodule}のdm; {$ r *.res} 手順dllmain(理由:整数); 始める のケース理由 dll_process_attach: 始める Application.CreateForm(TDATAMODULE1、DATAMODULE1); 終わり; dll_process_detach: 始める 終わり; DLL_THREAD_ATTACH:ENDを開始します。 DLL_THREAD_DETACH:ENDを開始します。 終わり 終わり; //覚えておいてください、Delphiでは、文字列パラメーターをPCHEタイプで定義する必要があります 手順show_demo(handle:thandle; const param:pchar); var オールハンドル:サンドル; 始める // DLLのハンドルを保存します Oldhandle:= application.handle; // DLLアプリケーションハンドルをPBのウィンドウハンドルに変更します //目的は、DLLとPBの実行可能ファイルがアプリケーションに属していることを達成することです //効果:DLLでウィンドウを開いた後、タスクバーにこれ以上のアイコンはありません application.handle:= handle; application.createform(tform1、form1); 試す form1.s_param:= strpas(param); form1.showmodal; ついに form1.free; application.handle:= oldhandle; 終わり; 終わり; 輸出 show_demo; 始める dllproc:= @dllmain; dllmain(dll_process_attach) 終わり。 |