我按照http://www.csdn.net/Develop/Read_Article.asp?Id=6351
《利用Delphi编写IE扩展》写了一个iehelper.dll在开始-运行regsvr32 c:\iehelper.dll
这个程序是正常的,但是我想让我的程序自动注册这个dll
于是我参考了
http://expert.csdn.net/Expert/topic/2331/2331357.xml?temp=.7110254
《如何使程序在运行时自动注册ActiveX控件》
按文章提供代码注册我的dll,为什么总是提示“类名称字符串错误”除了文章所说,还有更好的让程序注册dll的方法么?
《利用Delphi编写IE扩展》写了一个iehelper.dll在开始-运行regsvr32 c:\iehelper.dll
这个程序是正常的,但是我想让我的程序自动注册这个dll
于是我参考了
http://expert.csdn.net/Expert/topic/2331/2331357.xml?temp=.7110254
《如何使程序在运行时自动注册ActiveX控件》
按文章提供代码注册我的dll,为什么总是提示“类名称字符串错误”除了文章所说,还有更好的让程序注册dll的方法么?
解决方案 »
- 关于fastReport参数传值问题!
- 这种样式的控件在哪里找?
- 我要写一个程序在前台不需要运行后台运行可以:就像平时邮件服务品一样在前台不需要运行,而后台是提供服务的,要怎样来实现
- 请教高手:怎么用DELPHI代码自动修改paradox表中的某个字段属性?20变40长度?
- 小弟只有100分了,请各位大侠帮帮忙!急啊!!(万分感谢---在线等待)
- 怎样让DBGrid不失去焦点
- 为什么老出错误,请大哥指教!
- 关于local sql的语法
- 在用locate查询纪录的时候,怎么样才能使dbgrid1只显示这一条纪录,而不是显示所有纪录
- delphi 中如何利用钩子函数截获提示类型的弹窗并单击确定
- 一个语句的问题!
- 不爽,散分
const
RegisterOle = true;//×¢²á
UnRegisterOle = false;//жÔØ
type
TOleRegisterFunction = function : HResult;//×¢²á»òжÔغ¯ÊýµÄÔ­ÐÍ
var
hLibraryHandle : THandle;//ÓÉLoadLibrary·µ»ØµÄDLL»òOCX¾ä±ú
hFunctionAddress: TFarProc;//DLL»òOCXÖеĺ¯Êý¾ä±ú£¬ÓÉGetProcAddress·µ»Ø
RegFunction : TOleRegisterFunction;//×¢²á»òжÔغ¯ÊýÖ¸Õë
begin
Result := FALSE;
//´ò¿ªOLE/DCOMÎļþ£¬·µ»ØµÄDLL»òOCX¾ä±ú
hLibraryHandle := LoadLibrary(PCHAR(strOleFileName));
if (hLibraryHandle > 0) then//DLL»òOCX¾ä±úÕýÈ·
try
//·µ»Ø×¢²á»òжÔغ¯ÊýµÄÖ¸Õë
if (OleAction = RegisterOle) then//·µ»Ø×¢²áº¯ÊýµÄÖ¸Õë
hFunctionAddress := GetProcAddress(hLibraryHandle, pchar('DllRegisterServer'))
else//·µ»ØжÔغ¯ÊýµÄÖ¸Õë
hFunctionAddress := GetProcAddress(hLibraryHandle, pchar('DllUnregisterServer'));
if (hFunctionAddress <> NIL) then//×¢²á»òжÔغ¯Êý´æÔÚ
begin
RegFunction := TOleRegisterFunction(hFunctionAddress);//»ñÈ¡²Ù×÷º¯ÊýµÄÖ¸Õë
if RegFunction >= 0 then //Ö´ÐÐ×¢²á»òжÔزÙ×÷£¬·µ»ØÖµ>=0±íʾִÐгɹ¦
result := true;
end;
finally
FreeLibrary(hLibraryHandle);//¹Ø±ÕÒÑ´ò¿ªµÄOLE/DCOMÎļþ
end;
end;
我的代码:
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TDllRegisterServer=function:HResult; stdcall;
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
Ocx:TDllRegisterServer;
H:THandle;
begin
H:=LoadLibrary('c:\iehelper.dll');
try
@Ocx:=GetProcAddress(H,'DllRegisterServer');
Ocx;
finally
FreeLibrary(H);
end;
end;end.