library Stockdrv;
function SCInit(SoftId:Integer;hWnd:THandle;Msg:THandle):Integer;stdcall;
begin
CoInitialize(nil);
RecForm := hWnd;
Msg_StkData := Msg;
if frmMain = nil then begin
Application.Handle := hWnd;
Application.CreateForm(TfrmMain,frmMain);
frmMain.ParentWindow := hWnd;
end;
frmMain.Show;
Result := 1;
end;
//函数输出列表
exports
SCInit;
begin
end.
以上是股票分析软件分析家2006调用dll的一段代码。dll中的SCInit函数会创建一个窗口。在主程序中会显示出来。可是不知为什么,这个窗口就会闪显一下就消失了。经跟踪,每步执行都没有问题。加载dll完后窗口就会自动消失。
请问这是为什么啊?
请高手指点。
function SCInit(SoftId:Integer;hWnd:THandle;Msg:THandle):Integer;stdcall;
begin
CoInitialize(nil);
RecForm := hWnd;
Msg_StkData := Msg;
if frmMain = nil then begin
Application.Handle := hWnd;
Application.CreateForm(TfrmMain,frmMain);
frmMain.ParentWindow := hWnd;
end;
frmMain.Show;
Result := 1;
end;
//函数输出列表
exports
SCInit;
begin
end.
以上是股票分析软件分析家2006调用dll的一段代码。dll中的SCInit函数会创建一个窗口。在主程序中会显示出来。可是不知为什么,这个窗口就会闪显一下就消失了。经跟踪,每步执行都没有问题。加载dll完后窗口就会自动消失。
请问这是为什么啊?
请高手指点。
替换成:frmMain:=TfrmMain.Create(nil);
frmMain对象手动释放!
使用Dll的Application对象会有一些问题!
function SCInit(SoftId:Integer;hWnd:THandle;Msg:THandle):Integer;stdcall; 这个红色地方你可以用TForm
然后主程序做相应的代码调整即可。