Delphi编译整合所用资源的问题(100分)

  • 主题发起人 主题发起人 yeyueis1
  • 开始时间 开始时间
Y

yeyueis1

Unregistered / Unconfirmed
GUEST, unregistred user!
各位仁兄,问个Delphi编译的初级问题
我想实现的功能就是通过Delphi 7编译一个可独立于Delphi平台运行的exe文件,程序功能就是通过一个按钮注册一个text.ocx文件,现在问题就是能不能编译这个需要注册的text.ocx到exe中去,最终客户使用的时候就只有一个exe文件,点击上面按钮就可直接完成注册?
程序中注册ocx的代码:
var
OCXHand: THandle;
RegFunc: TDllRegisterServer;
begin
Try
OCXHand:= LoadLibrary('text.ocx');
RegFunc:= GetProcAddress(OCXHand, 'DllRegisterServer');
if RegFunc <> 0 then
MessageBox(Application.Handle,'不能注册文件!','信息提示',
MB_ICONINFORMATION+MB_OK)
else
MessageBox(Application.Handle,'注册文件成功!','信息提示',
MB_ICONINFORMATION+MB_OK);
finally
FreeLibrary(OCXHand);
end;
end;

望各位大侠抛砖给出方案~~
 
1. *.ocx 文件不能注册到 EXE 文件里,你的代码是把一个 *.ocx 控件注册到系统。
2.要实现把 *.ocx 控件注册到系统,只需要一下一行代码:
winexec(PChar('regsvr32.exe a.ocx'),SW_HIDE);
 
用资源文件编译一下,加进去就可以了
 
我的用法是,将文件包含进资源文件,在运行时首先检测文件是否存在,若不存在则重建干文件,然后注册就可以了
 
to liyinwei:
感谢,我现在主要的问题是如何整合程序需要注册的ocx到exe中去,用户只需要一个exe文件就能实现注册ocx的功能,而不需要一个exe和一个ocx
to JonnyZheng and sllin:
能否详细一点如何将文件包含进资源文件,以及如何将资源文件编译到exe中去,谢谢
 
//资源文件释放
//加入个.RC文件,写上 MyOcx OCX 你ocx的名字.ocx
//ExtractRes('OCX','MyOcx','释放后ocx的名字.dll');
procedure ExtractRes(ResType, ResName, ResNewName:String);
var Res:TResourceStream;
begin
Res:=TResourceStream.Create(Hinstance, Resname, Pchar(ResType));
try
Res.SavetoFile('./'+ResNewName);
//路径自己改
finally
Res.Free;
end;
end;
 
即使使用资源文件的方法,使用的时候还是要释放一个独立的 OCX 文件才能正常运行。
使用 OCX 的方法常用2种:程序中直接使用、动态建立。
动态建立还好处理一点,直接从资源文件里释放 OCX 到一个独立文件,然后注册它。
如果是直接使用就麻烦一些了,你需要使用 Application 的 OnException 事件捕获 OCX 不存在或未注册的错误,然后释放 OCX 文件,注册 OCX 文件。
这样会使程序变得不稳定和启动变慢。
 
后退
顶部