H
happycyp
Unregistered / Unconfirmed
GUEST, unregistred user!
开发环境(Win2000 + Delphi7), 三层结构。
遇到一个问题,在主程序调用Dll的窗体时,在开发的机子上调用都没有问题,
在分发到其他电脑上,有时候窗体显示不出来,停止响应;有时候进行操作时,停止响应。
测试两台机子发现如下情况:
(1)电脑1: XP系统,在操作时,打开Dll窗体时,停止响应,将主程序程序最小化,在桌面刷新几下就会马上打开窗体,否则将一直没有响应,或者要很长时间才会打开。
(2)电脑2: Win2003,在操作时,打开Dll窗体,有时候可以打开,有时候没有响应,有时候在dll窗体中操作时,就停止响应。
经调试发现,已经从中间层取得数据,停止响应应该是在本机客户端造成的。
Midas.dll, borlndmm.dll,都随主程序一同分发。
代码:
unit uStockExports;
interface
uses
ShareMem, SysUtils, Windows, Forms, Controls, Classes, SysUnit;
var
App: TApplication;
Scn: TScreen;
HintWindow: THintWindowClass;
implementation
uses
uStockPlanBill;
function StockPlanBill(AOwner: TApplication; D_Hint: THintWindowClass;
UI: TUserInfo; SendScreen: TScreen): TFmStockPlanBill; stdcall;
begin
try
Application := AOwner;
if SendScreen <> nil then
Screen := SendScreen; //传入Screen对象以使主程序的MDIChild正常增加
HintWindowClass := D_Hint;
Application.ProcessMessages;
Result := FmStockPlanBill ;
if not Assigned(Result) then
Result := TFmStockPlanBill.Create(AOwner);
Result.Caption := '采购计划申请单';
Result.IsAudit := False;
Result.FormStyle := fsMDIChild;
Result.WindowState := wsMaximized;
Result.Show;
except on E : Exception do
begin
if Assigned(FmStockPlanBill) then FmStockPlanBill.Free ;
Application.MessageBox (PChar(E.Message),'出错',MB_OK + MB_ICONERROR);
Result := nil;
end;
end;
end;
procedure DLLEntryPoint(dwReason: DWord); register;
begin
case dwReason of
DLL_PROCESS_ATTACH: begin
App := Application;
Scn := Screen;
HintWindow := HintWindowClass;
end;
DLL_PROCESS_DETACH: begin
Application := App;
Screen := Scn;
HintWindowClass := HintWindow;
end;
DLL_THREAD_ATTACH: ;
DLL_THREAD_DETACH: ;
end;
end;
exports
StockPlanBill;
initialization
DLLProc := @DLLEntryPoint;
DLLEntryPoint(DLL_PROCESS_ATTACH);
finalization
Screen := Scn;
Application := App;
HintWindowClass := HintWindow;
end.
请各位高人给指指招。谢谢了。
遇到一个问题,在主程序调用Dll的窗体时,在开发的机子上调用都没有问题,
在分发到其他电脑上,有时候窗体显示不出来,停止响应;有时候进行操作时,停止响应。
测试两台机子发现如下情况:
(1)电脑1: XP系统,在操作时,打开Dll窗体时,停止响应,将主程序程序最小化,在桌面刷新几下就会马上打开窗体,否则将一直没有响应,或者要很长时间才会打开。
(2)电脑2: Win2003,在操作时,打开Dll窗体,有时候可以打开,有时候没有响应,有时候在dll窗体中操作时,就停止响应。
经调试发现,已经从中间层取得数据,停止响应应该是在本机客户端造成的。
Midas.dll, borlndmm.dll,都随主程序一同分发。
代码:
unit uStockExports;
interface
uses
ShareMem, SysUtils, Windows, Forms, Controls, Classes, SysUnit;
var
App: TApplication;
Scn: TScreen;
HintWindow: THintWindowClass;
implementation
uses
uStockPlanBill;
function StockPlanBill(AOwner: TApplication; D_Hint: THintWindowClass;
UI: TUserInfo; SendScreen: TScreen): TFmStockPlanBill; stdcall;
begin
try
Application := AOwner;
if SendScreen <> nil then
Screen := SendScreen; //传入Screen对象以使主程序的MDIChild正常增加
HintWindowClass := D_Hint;
Application.ProcessMessages;
Result := FmStockPlanBill ;
if not Assigned(Result) then
Result := TFmStockPlanBill.Create(AOwner);
Result.Caption := '采购计划申请单';
Result.IsAudit := False;
Result.FormStyle := fsMDIChild;
Result.WindowState := wsMaximized;
Result.Show;
except on E : Exception do
begin
if Assigned(FmStockPlanBill) then FmStockPlanBill.Free ;
Application.MessageBox (PChar(E.Message),'出错',MB_OK + MB_ICONERROR);
Result := nil;
end;
end;
end;
procedure DLLEntryPoint(dwReason: DWord); register;
begin
case dwReason of
DLL_PROCESS_ATTACH: begin
App := Application;
Scn := Screen;
HintWindow := HintWindowClass;
end;
DLL_PROCESS_DETACH: begin
Application := App;
Screen := Scn;
HintWindowClass := HintWindow;
end;
DLL_THREAD_ATTACH: ;
DLL_THREAD_DETACH: ;
end;
end;
exports
StockPlanBill;
initialization
DLLProc := @DLLEntryPoint;
DLLEntryPoint(DLL_PROCESS_ATTACH);
finalization
Screen := Scn;
Application := App;
HintWindowClass := HintWindow;
end.
请各位高人给指指招。谢谢了。