XE7 DLL中封装DbGrid报错 |
尚未結案
|
wuhs
一般會員 發表:1 回覆:6 積分:1 註冊:2015-09-24 發送簡訊給我 |
一个简单的DLL专案,里面有一个VCL Form,Form上放一个DBGrid,或DbGridEh,在IDE环境下运行报错,如图:
这是DLL窗体单元的引用: uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, Vcl.DBGrids; 这是DLL工程单元的引用 uses sharemem, Vcl.Forms, System.SysUtils, System.Classes, Unit2 in 'Unit2.pas' {Form2}; 这是exe工程单元的引用 uses sharemem, Vcl.Forms, Unit1 in 'Unit1.pas' {Form1}, 应该没有什么问题的。D7下也是这么干的。 在IDE环境下,可以编译,不报错,但运行就报一楼的错。 编译好了运行,程序退出时报错如下图: 各位先进,有招吗?
------
wuhs 編輯記錄
wuhs 重新編輯於 2015-09-26 12:17:20, 註解 無‧
|
wuhs
一般會員 發表:1 回覆:6 積分:1 註冊:2015-09-24 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
wuhs
一般會員 發表:1 回覆:6 積分:1 註冊:2015-09-24 發送簡訊給我 |
|
JamesJuan
中階會員 發表:2 回覆:76 積分:80 註冊:2003-04-08 發送簡訊給我 |
|
wuhs
一般會員 發表:1 回覆:6 積分:1 註冊:2015-09-24 發送簡訊給我 |
谢谢兄弟,但我试了,去掉也不行,退出时,仍报216错误。
这是DLL库文件代码: library Project3; { Important note about DLL memory management: ShareMem must be the first unit in your library's USES clause AND your project's (select Project-View Source) USES clause if your DLL exports any procedures or functions that pass strings as parameters or function results. This applies to all strings passed to and from your DLL--even those that are nested in records and classes. ShareMem is the interface unit to the BORLNDMM.DLL shared memory manager, which must be deployed along with your DLL. To avoid using BORLNDMM.DLL, pass string information using PChar or ShortString parameters. } uses Vcl.Forms, System.SysUtils, System.Classes, Unit2 in 'Unit2.pas' {Form2}; {$R *.res} var DLLApp: TApplication; DllScr: TScreen; const DLL_PROCESS_DETACH = 0; DLL_PROCESS_ATTACH = 1; DLL_THREAD_ATTACH = 2; DLL_THREAD_DETACH = 3; procedure DLLUnLoadProc(Reason: Integer); register; begin try if Reason = DLL_PROCESS_DETACH then begin Application := DLLApp; Screen := DLLScr; end; except on e: exception do Application.MessageBox(PChar(E.Message), '系统提示'); end; end; Exports ShowForm2; begin try DLLApp := Application; DLLScr := Screen; DllProc:= @DLLUnLoadProc; except on E: Exception do begin Application.MessageBox(PChar(E.Message),'系统提示'); end; end; end. ////////////////////////////////////////////////////////////////////////////////// 这是内部Form代码 unit Unit2; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, Vcl.DBGrids; type TForm2 = class(TForm) DBGrid1: TDBGrid; procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } public { Public declarations } end; var Form2: TForm2; Procedure ShowForm2(App: TApplication; Scr: TScreen);stdcall; implementation {$R *.dfm} Procedure ShowForm2(App: TApplication; Scr: TScreen);stdcall; begin If Assigned(Form2) then Form2.BringToFront else begin Application:= App; Screen:= Scr; Form2:= TForm2.Create(Application); Form2.Show; end; end; procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction); begin action:=cafree; Form2:=nil; end; end.
------
wuhs |
wuhs
一般會員 發表:1 回覆:6 積分:1 註冊:2015-09-24 發送簡訊給我 |
|
JamesJuan
中階會員 發表:2 回覆:76 積分:80 註冊:2003-04-08 發送簡訊給我 |
source code 已經上傳至下述網址,請參閱
http://1drv.ms/1PIWW71 |
wuhs
一般會員 發表:1 回覆:6 積分:1 註冊:2015-09-24 發送簡訊給我 |
|
blue
中階會員 發表:170 回覆:136 積分:81 註冊:2002-04-15 發送簡訊給我 |
|
wuhs
一般會員 發表:1 回覆:6 積分:1 註冊:2015-09-24 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |