Delphi 怎么不注册 dll 就调用 com
2012-03-10 17:28
246 查看
一.方法
lich (2003-10-30 22:16:00)
前言:
如果你的程序中使用了 COM对象或者 OCX控件,
发布程序的时候必须带上相关的 DLL文件或者 OCX文件,
同时还需要注册到系统中,
如果我想让我的程序 Copy & Run, 不需要安装,(现在流行绿色软件嘛)
那么使用下面的方法可以调用未注册的 COM对象或者 OCX控件
我仅仅提供简单的方法,大家共同研究,经验共享
如果COM对象没有在注册表中注册,那么按照下面的方法创建它
二.例子
下面是用上面的函数从ocx 文件中创建对象的例子
此处创建了一个 MSCOMM32 的串口控件,
调用了此控件的 AboutBox 的对话框,
不管此ocx 文件是否已经注册到系统中,下面的程序都会正常执行
lich (2003-10-30 22:16:00)
前言:
如果你的程序中使用了 COM对象或者 OCX控件,
发布程序的时候必须带上相关的 DLL文件或者 OCX文件,
同时还需要注册到系统中,
如果我想让我的程序 Copy & Run, 不需要安装,(现在流行绿色软件嘛)
那么使用下面的方法可以调用未注册的 COM对象或者 OCX控件
我仅仅提供简单的方法,大家共同研究,经验共享
如果COM对象没有在注册表中注册,那么按照下面的方法创建它
function CreateComObjectFromDll(CLSID: TGUID; DllHandle: THandle): IUnknown; var Factory: IClassFactory; DllGetClassObject: function(const CLSID, IID: TGUID; var Obj): HResult; stdcall; begin DllGetClassObject := GetProcAddress(DllHandle, 'DllGetClassObject'); if Assigned(DllGetClassObject) then begin DllGetClassObject(CLSID, IClassFactory, Factory); Factory.CreateInstance(nil, IUnknown, Result); end; end;
二.例子
下面是用上面的函数从ocx 文件中创建对象的例子
此处创建了一个 MSCOMM32 的串口控件,
调用了此控件的 AboutBox 的对话框,
不管此ocx 文件是否已经注册到系统中,下面的程序都会正常执行
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComObj, ActiveX;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
ocxhdl: THandle;
comm: Variant;
end;
const
CLASS_MSComm: TGUID = '{648A5600-2C6E-101B-82B6-000000000014}';
var
Form1: TForm1;
function CreateComObjectFromDll(CLSID: TGUID; DllHandle: THandle): IUnknown;
implementation
{$R *.dfm}
function CreateComObjectFromDll(CLSID: TGUID; DllHandle: THandle): IUnknown; var Factory: IClassFactory; DllGetClassObject: function(const CLSID, IID: TGUID; var Obj): HResult; stdcall; begin DllGetClassObject := GetProcAddress(DllHandle, 'DllGetClassObject'); if Assigned(DllGetClassObject) then begin DllGetClassObject(CLSID, IClassFactory, Factory); Factory.CreateInstance(nil, IUnknown, Result); end; end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ocxhdl := LoadLibrary('mscomm32.ocx');
if ocxhdl < 32 then
ShowMessage('error');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
comm := CreateComObjectFromDll(CLASS_MSComm, ocxhdl) as IDispatch;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
comm.AboutBox;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
comm := Null;
end;
end.
相关文章推荐
- C#的DLL注册为COM,Delphi来调用
- C#的DLL注册为COM,Delphi来调用
- C#的DLL注册为COM,Delphi来调用
- .net DLL 注册 regasm delphi调用
- Delphi(Lazarus)怎样不注册调用COM
- C#的DLL注册为COM,VB来调用
- delphi 调用 C# COM DLL 解析C#数据集
- Delphi中怎么调用vb的DLL
- .net如何调用未注册COM的非托管的dll
- C#的DLL注册为COM,VB来调用
- delphi中用代码实现注册Ocx和Dll(有点怪异,使用CallWindowProc来调用指定函数DllRegisterServer)
- RegAsm注册DLL组件使用jacob调用的问题com.jacob.com.ComFailException: Can't co-create object
- 不注册而直接调用COM DLL的方法
- .net如何调用未注册COM的非托管的dll
- C# 调用带有复杂参数的C++ ,delphi dll 注意事项备注。(C++ dll 怎么回调C# 程序,参数怎么写?)
- C#的DLL注册为COM,VB来调用
- C#的DLL注册为COM,VB来调用
- C#的DLL注册为COM,VB来调用
- delphi中怎么调用vb的DLL
- 绿软必备:ActiveXDLL免注册调用的方法(改良自阿国哥的源码) 收藏