掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Lazarus2.2.2 で DLL(フォーム付き)のフォームが表示されません。 (ID:150400)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
お世話になっています。 初めての投稿です。いつも行き詰まったときにこちらのサイトをはじめ、皆様からの情報に たいへんお世話になっています。 さて、表題の質問ですが、Lazarusでうまく機能しません。 DLLファイル(project, unit ファイル)側で、フォーム表示機能を作成しておき、 EXEファイルから、そのDLLファイル内のフォームを表示しようとしているのですが、 思うように動きません。 (フォーム表示機能ではなく、DLLファイルで計算機能の関数を作成し、EXEファイルで 呼び出すと、ちゃんと計算してくれており、DLL呼び出しはできているようです。) Delphiに関してはいろいろ情報もあるのですが、Lazarusでの情報が少なくどこが問題なのか、 わからず、困っています。 サンプルコードを掲示しますので、どなたかその解決方法をご存じの方がおられれば、教えていただけませんか。 (自分の気の付いていない点が他にもあるのかもしれません) よろしくお願いします。 ※ 下記の状態で、exeファイルを実行すると、 1 --> 2 --> 2end --> 3 --> 3end 、となり FormDLL.ShowModal で エラーになっているようです。 //-------------- DLL のソース (SampleDLL.lpr) ------------ library SampleDLL; {$mode objfpc}{$H+} uses Classes, SysUtils , Windows, Forms, Controls, Interfaces, Dialogs , Unit_formdll; function ShowFormDLL(AppHandle: HWND): TModalResult; stdcall; begin Application.Handle:= AppHandle; try FormDLL := TFormDLL.Create(Application); try showmessage('1'); Result := FormDLL.ShowModal; showmessage('1end'); finally showmessage('2'); FormDLL.Release; showmessage('2end'); end; finally showmessage('3'); Application.Handle := 0; showmessage('3end'); end end; exports ShowFormDLL; begin end. //-------------- DLL のフォームユニット (Unit_formDll.pas) ------------ unit Unit_formdll; {$mode ObjFPC}{$H+} interface uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TFormDLL } TFormDLL = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private public end; var FormDLL: TFormDLL; implementation {$R *.lfm} { TFormDLL } procedure TFormDLL.Button1Click(Sender: TObject); begin ModalResult := mrOK; end; end. //------------------------------------------------- //------- Exeファイル(呼び出し側)のコード(静的インポート) --------------------- function ShowFormDLL(AppHandle: HWND): TModalResult; stdcall; external 'SampleDLL.dll'; procedure TForm1.Button1Click(Sender: TObject); begin if ShowFormDLL(Application.Handle) = mrOK then showmessage('Call DLL finished.'); end; //----------------------- 以上です。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.