我的一个程序:function ShowCalculator(mainApp:TApplication;calcForm:TForm;var calcValue:real):boolean;stdcall; begin if calcForm=Nil then calcForm:=TfrmCalculator.Create(mainApp); calcForm.ShowModal; calcValue:=calcResult; calcForm:=Nil; Result:=calcTransMode; end; exports ShowCalculator; function ShowCalculator(application:TApplication;calcForm:TForm;var calcTransValue:real):boolean;stdcall;external 'CalculatorDll.Dll'; if ShowCalculator(application,calcForm,calcTransValue) then Face.DisplayFocus^.Text :=FloattoStr(calcTransValue);
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, DB, ADODB;type
TfrmUsrAdd = class(TForm)
.
.
.
procedure showFrmUsrAdd(AHandle:THandle) ;stdcall;implementationprocedure showFrmUsrAdd(AHandle:THandle);stdcall;
begin
Application.Handle:=AHandle;
with frmuserass do
try
frmuseradd:=Tfrmuseradd.create(application);
ShowModal;
finally
free;
end;
end;
.
.
.
libraryexports
showFrmUsrAdd;就可以了,给分!!!!
我的一个程序:function ShowCalculator(mainApp:TApplication;calcForm:TForm;var calcValue:real):boolean;stdcall;
begin
if calcForm=Nil then
calcForm:=TfrmCalculator.Create(mainApp);
calcForm.ShowModal;
calcValue:=calcResult;
calcForm:=Nil;
Result:=calcTransMode;
end;
exports ShowCalculator;
function ShowCalculator(application:TApplication;calcForm:TForm;var calcTransValue:real):boolean;stdcall;external 'CalculatorDll.Dll'; if ShowCalculator(application,calcForm,calcTransValue) then
Face.DisplayFocus^.Text :=FloattoStr(calcTransValue);
你给的那段程序和我的错误一样:提示‘无效的窗口句柄’delphimo:
把Application.Handle:=AHandle;把这句去掉
是可以,但是新开的窗口在会出现在任务栏上,
我想是需要传递application的句柄给dll 的,但不知道为什么这个句柄总算传不过来。谢谢各位,谁能给个例程?
稍后把传递句柄的问题解决后,就给分。谢谢~!
我的信箱:[email protected]
谢谢~!!
原来出错是因为可执行程序中是静态调用的dll,导致无法传递application.handle给dll
后来改成动态调用就好了。
3x各位。
就可以了