左邊樹狀結構中,ISample 是根據我們填寫的類名得到的接口名稱.選中 ISample,點擊右鍵, 選擇 New Methord(或者上方工具欄中的綠色按鈕,上圖是灰色的.),可以創建一個方法,并給方法設置參數(在右邊的Paramters選項卡中).這里,方法名為 GetRoomInfo,并建立2個參數: RoomNo, Account,返回值 BSTR.如圖:
◎設置參數時, 双击Modifier列弹出窗口,可以选择参数的方式:in、out分别对应const、out定义,选择Has Default Value可设置参数缺省值。
◎參數類型的不同:
接口定义中缺省的字符参数或返回值将不再是String而是WideString。WideString 是Delphi中符合OLE 32-bit版本的Unicode类型,当是字符时,WideString与String几乎等同,当处理Unicode字符时,则会有很大差别。联想到COM本身是为了跨平台使用,可以很容易的理解为什么数据通信时需要使用WideString类型。
同样的道理,integer类型将变成SYSINT或者Int64、SmallInt或者Shortint,这些细微的变化都是为了符合规范。
設置完成后,點擊上方的 刷新 按鈕, 類型庫編輯器自動生成delphi 代碼:
注: 此時如果需要返回類型庫編輯器的設置,可以選擇 View- Type Library,修改設置后,點擊 刷新 按鈕. (我把原來的參數類型改了)…
unit Unit1;
{$WARN SYMBOL_PLATFORM OFF}
interface
uses
Windows, ActiveX, Classes, ComObj, Project1_TLB, StdVcl;
type
TSample = class(TTypedComObject, ISample)
protected
function GetRoomInfo(const RoomNo: WideString;
Account: SYSINT): WideString; stdcall;
{Declare ISample methods here}
end;
implementation
uses ComServ;
function TSample.GetRoomInfo(const RoomNo: WideString;
Account: SYSINT): WideString;
begin
end;
initialization
TTypedComObjectFactory.Create(ComServer, TSample, Class_Sample,
ciMultiInstance, tmApartment);
end.
二. 接口類的具體實現.
1.給接口類中的方法添加具體的代碼.這里為了能讓某人能看懂,寫的很簡單:
function TSample.GetRoomInfo(const RoomNo: WideString;
Account: SYSINT): WideString;
begin
if Account > 0 then
Result := '這是單賬戶客人,房間號為: ' + RoomNo
else
Result := '這是多賬戶客人.房間號為: ' + RoomNo ;
Result := RoomNo;//這個只是為了讓某人看懂,代碼大家可以自己寫.
end;
2.注冊創建COM對象
◎选择菜单“Run – Register ActiveX Server”,或者通过Windows下system/system32目录中的regsvr32.exe程序注册编译好的DLL文件。regsvr32的具体参数可以通过regsvr32/?来获得。对于进程外(EXE型)的COM对象,执行一次应用程序就注册了。
提示DLL注册成功.
三.COM對象的調用
新建一個Application,在窗體中放置兩個Edit,分別是用來傳遞 RoomNo,和Account的. 代碼如下:
implementation
uses ComObj,Project1_TLB;//這里的引用需要注意.
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
COMSvr : ISample;
begin
COMSvr := CreateComObject(CLASS_Sample) as ISample;
//也可以使用Guid 实例化
//COMSvr:=CreateComObject(StringToGuid('{330B6DA3-F7F6-49DD-B552-68769A916D66}')) as ISample;
if COMSvr <> nil then
begin
try
ShowMessage(COMSvr.GetRoomInfo(Edit1.Text,StrToInt(Edit2.Text)));
finally
COMSvr := nil;
end;
end;
end;
end.
運行就可以看到效果了.
分享到:
相关推荐
delphi com深入编程 delphi com深入编程 delphi com深入编程
Delphi免注册使用ActiveX控件FlexGrid.ocx
delphi COM深入编程
Delphi COM深入编程(经典),详细介绍delphi中的接口,已经COM+的实现.例子详尽.
delphi com深入编程 源码.rar delphi com深入编程 源码.rar
《Delphi COM 深入编程》经过整理后
delphi6、delphi7下无法调用activeX 控件的解决方法
《Delphi COM深入编程 》源代码
基于COM的Delphi和Matlab接口编程研究
Delphi COM深入编程(经典),详细介绍delphi中的接口,已经COM+的实现.例子详尽.
Delphi COM深入编程是一本很好的Delphi COM编程知道书籍。通过这本书我才真正了解了COM的基本原理,并且在工作中取得了很好的效果。虽然Delphi现在已经不是主流了,但《Delphi COM深入编程.pdf》上传后还是有不少...
Delphi COM 深入编程 PDG电子书.7z Delphi COM 深入编程 PDG电子书.7z
这不是一篇关于接口应用的文章,而是接口操作的编译器实现过程
Delphi 7 数据库编程Delphi 7 数据库编程Delphi 7 数据库编程Delphi 7 数据库编程Delphi 7 数据库编程Delphi 7 数据库编程Delphi 7 数据库编程Delphi 7 数据库编程Delphi 7 数据库编程Delphi 7 数据库编程Delphi 7 ...
比较直观的一个delphi接口的入门教材,有代码,可以直接复制测试的,可以转换成自己的代码,学习用的,仅供参考
一般地,高版本Delphi向导开发的ActiveX控件直接在MFC应用程序中使用是有问题的,其中一个问题就是MFC中出现双接口标识的断言,或者直接初始化应用时出现其它断言,解决办法包括修改MFC头文件等暴力办法,该Hello ...
利用delphi开发activeX实例利用delphi开发activeX实例利用delphi开发activeX实例
参考实例:Delphi COM深入编程的书籍源码..rar
Delphi ActiveX Form的使用实例
Delphi中Com的开发一直是一个弱点,特别是ActiveX控件的开发,附件为我学习的例子的源码