将dll和exe的 Build with runtime packages 打勾时就运行正常,如果取消勾就出错为何? 急...在线等 ( 积分: 50 )

  • 主题发起人 主题发起人 softdelphi8
  • 开始时间 开始时间
S

softdelphi8

Unregistered / Unconfirmed
GUEST, unregistred user!
这是DLL全代码:
Library DLLPro;
uses
ShareMem, SysUtils, StdCtrls, ExtCtrls, Controls, Forms, Classes,Messages, Windows, Menus, Graphics;
{$R *.res}
Function CreateControl(AppHandle: THandle; AOwner: TComponent;
PControl: TWinControl): TEdit; Stdcall;
Var
Edit1: TEdit;
Begin
Application.Handle := AppHandle;
Edit1 := TEdit.Create(AOwner);
Edit1.Parent := PControl;
Edit1.ParentFont:=False;
Edit1.Text := 'DLL Create Edit1';
Edit1.Name := 'Edit1';
Edit1.Left := 100;
Edit1.Top := 100;
Result := Edit1;
End;
Exports
CreateControl;
Begin
End.
 
这是EXE调用程序的全代码:
Unit Unit1;
Interface
Uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ComCtrls;
Type
TForm1 = Class(TForm)
Button1: TButton;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
Procedure Button1Click(Sender: TObject);
Private
{ Private declarations }
Public
{ Public declarations }
End;
Type
TCreateControl = Function(AppHandle: THandle; AOwner: TComponent;
PControl: TWinControl): TEdit; Stdcall;
EDLLLoadError = Class(Exception);
Var
Form1: TForm1;
Implementation
{$R *.dfm}
Procedure TForm1.Button1Click(Sender: TObject);
Var
LibHandle: THandle;
CreateControl: TCreateControl;
Begin
LibHandle := LoadLibrary('DLLPro.dll');
Try
If LibHandle = HINSTANCE_ERROR Then
Raise EDLLLoadError.Create('Unable to Load DLL');
@CreateControl := GetProcAddress(LibHandle, 'CreateControl');
If Not (@CreateControl = Nil) Then
CreateControl(Application.Handle, Self, TabSheet1);
Finally
FreeLibrary(LibHandle);
End;
End;
End.
 
上面对将dll和exe的 [red]Build with runtime packages[/red] 打勾时就运行正常,如果取消勾就出错,请大家帮助解决这个问题?
 
如果不带package的话,EXE和DLL中各有一份VCL代码.EXE和DLL中的TWinControl等类不过是同名的两个类而已.
如果带了Package的话,运行时和VCL代码都在RTL Package中,只有一份.VCL类才是同一个类.
 
你将所有的DLL 和EXE 都不打勾 编译 一下 再运行就可以了
 
如果[red]不打勾运行就会出错[/red],正是要解决此问题的主题呀。
 
看来你的基础知识 不够扎实啊 带包编译就是将VCL库以BPL 形式 与 EXE 和 dll 一起发布 这样EXE 与dll 的大小就会变的很小 不勾的话 程序执行需要的vcl代码 同时编译到了exe 与 dll 这样的话 EXE 与 DLL 存在了相同的重复的类 这样什么都不写 一个EXE 或dll 都至少200K
 
我现在不要打勾,但要运行不出错。请问怎么解决!!!
200K大没有关系,现在的电脑配置非常高了。
 
后退
顶部