问题是:怎么在TComObject.Execute 中使用Forms单元中Application或者使用TForm对象,如Application.MessageBox(...),Form1.Show等?如果可以实现,请给例子
如果不能实现,请给原因
或者提供相关的有相关例子的电子书籍(可以下载的)或网页若能解决问题,100分是不够的,我可以再加!谢谢各位!{ Unit Name: ComTest.dpr }
library ComTest;
{%File 'Index.asp'}
uses
ComServ, ComTest_TLB in 'ComTest_TLB.pas', ComObect in 'ComObect.pas' {ComObject: CoClass};
exports
DllGetClassObject, DllCanUnloadNow, DllRegisterServer, DllUnregisterServer;
{$R *.TLB} {$R *.RES}
begin
end.<@language =VBScript ><!--Index.asp--><HTML><BODY><TITLE> Testing Delphi ASP </TITLE><% Set Obj = Server.CreateObject("ComTest.ComObject") Obj.Execute %></BODY></HTML>
{ Unit Name: ComObect.pas }
unit ComObect;
{$WARN SYMBOL_PLATFORM OFF}
interface
uses ComObj, ActiveX, AspTlb, ComTest_TLB, StdVcl;
type
TComObject = class(TASPObject, IComObject)
protected
procedure OnEndPage; safecall;
procedure OnStartPage(const AScriptingContext: IUnknown); safecall;
procedure Execute; safecall;
end;
implementation
uses ComServ;
procedure TComObject.OnEndPage;
begin
inherited OnEndPage;
end;
procedure TComObject.OnStartPage(const AScriptingContext: IUnknown);
begin
inherited OnStartPage(AScriptingContext);
end;
procedure TComObject.Execute;
begin
//此处代码怎么写
end;
initialization
TAutoObjectFactory.Create(ComServer, TComObject, Class_ComObject,
ciMultiInstance, tmApartment);
end.
{ Unit Name: ComObect.tlb }
unit ComTest_TLB;
// 此处有Delphi 内部注释,因为太长,不宜贴,我删除了这些注释 //
{$TYPEDADDRESS OFF} // Unit must be compiled without type-checked pointers.
{$WARN SYMBOL_PLATFORM OFF}
{$WRITEABLECONST ON}
interface
uses ActiveX, Classes, Graphics, StdVCL, Variants, Windows;
// 此处有Delphi 内部注释,因为太长,不宜贴,我删除了这些注释 //
const
// TypeLibrary Major and minor versions
ComTestMajorVersion = 1;
ComTestMinorVersion = 0;
LIBID_ComTest: TGUID = '{19F2FB94-C28C-49A2-89FA-FDE8607E7155}';
IID_IComObject: TGUID = '{AB671B32-0EF9-4B70-A69D-FC701D31B527}';
CLASS_ComObject: TGUID = '{F5B2984E-CEAB-4F5F-B91C-62849BBB4727}';
type
// Forward declaration of types defined in TypeLibrary
IComObject = interface;
IComObjectDisp = dispinterface;
// Declaration of CoClasses defined in Type Library
// (NOTE: Here we map each CoClass to its Default Interface)
ComObject = IComObject;
// 此处有Delphi 内部注释,因为太长,不宜贴,我删除了这些注释 //
IComObject = interface(IDispatch)
['{AB671B32-0EF9-4B70-A69D-FC701D31B527}']
procedure OnStartPage(const AScriptingContext: IUnknown); safecall;
procedure OnEndPage; safecall; procedure Execute; safecall;
end;
// 此处有Delphi 内部注释,因为太长,不宜贴,我删除了这些注释 //
IComObjectDisp = dispinterface
['{AB671B32-0EF9-4B70-A69D-FC701D31B527}']
procedure OnStartPage(const AScriptingContext: IUnknown); dispid 1;
procedure OnEndPage; dispid 2; procedure Execute; dispid 3;
end;
// 此处有Delphi 内部注释,因为太长,不宜贴,我删除了这些注释 //
CoComObject = class
class function Create: IComObject;
class function CreateRemote(const MachineName: string): IComObject;
end;
implementation
uses ComObj;
class function CoComObject.Create: IComObject;
begin
Result := CreateComObject(CLASS_ComObject) as IComObject;
end;
class function CoComObject.CreateRemote(const MachineName: string): IComObject;
begin
Result := CreateRemoteComObject(MachineName, CLASS_ComObject) as IComObject;
end;
end.
如果不能实现,请给原因
或者提供相关的有相关例子的电子书籍(可以下载的)或网页若能解决问题,100分是不够的,我可以再加!谢谢各位!{ Unit Name: ComTest.dpr }
library ComTest;
{%File 'Index.asp'}
uses
ComServ, ComTest_TLB in 'ComTest_TLB.pas', ComObect in 'ComObect.pas' {ComObject: CoClass};
exports
DllGetClassObject, DllCanUnloadNow, DllRegisterServer, DllUnregisterServer;
{$R *.TLB} {$R *.RES}
begin
end.<@language =VBScript ><!--Index.asp--><HTML><BODY><TITLE> Testing Delphi ASP </TITLE><% Set Obj = Server.CreateObject("ComTest.ComObject") Obj.Execute %></BODY></HTML>
{ Unit Name: ComObect.pas }
unit ComObect;
{$WARN SYMBOL_PLATFORM OFF}
interface
uses ComObj, ActiveX, AspTlb, ComTest_TLB, StdVcl;
type
TComObject = class(TASPObject, IComObject)
protected
procedure OnEndPage; safecall;
procedure OnStartPage(const AScriptingContext: IUnknown); safecall;
procedure Execute; safecall;
end;
implementation
uses ComServ;
procedure TComObject.OnEndPage;
begin
inherited OnEndPage;
end;
procedure TComObject.OnStartPage(const AScriptingContext: IUnknown);
begin
inherited OnStartPage(AScriptingContext);
end;
procedure TComObject.Execute;
begin
//此处代码怎么写
end;
initialization
TAutoObjectFactory.Create(ComServer, TComObject, Class_ComObject,
ciMultiInstance, tmApartment);
end.
{ Unit Name: ComObect.tlb }
unit ComTest_TLB;
// 此处有Delphi 内部注释,因为太长,不宜贴,我删除了这些注释 //
{$TYPEDADDRESS OFF} // Unit must be compiled without type-checked pointers.
{$WARN SYMBOL_PLATFORM OFF}
{$WRITEABLECONST ON}
interface
uses ActiveX, Classes, Graphics, StdVCL, Variants, Windows;
// 此处有Delphi 内部注释,因为太长,不宜贴,我删除了这些注释 //
const
// TypeLibrary Major and minor versions
ComTestMajorVersion = 1;
ComTestMinorVersion = 0;
LIBID_ComTest: TGUID = '{19F2FB94-C28C-49A2-89FA-FDE8607E7155}';
IID_IComObject: TGUID = '{AB671B32-0EF9-4B70-A69D-FC701D31B527}';
CLASS_ComObject: TGUID = '{F5B2984E-CEAB-4F5F-B91C-62849BBB4727}';
type
// Forward declaration of types defined in TypeLibrary
IComObject = interface;
IComObjectDisp = dispinterface;
// Declaration of CoClasses defined in Type Library
// (NOTE: Here we map each CoClass to its Default Interface)
ComObject = IComObject;
// 此处有Delphi 内部注释,因为太长,不宜贴,我删除了这些注释 //
IComObject = interface(IDispatch)
['{AB671B32-0EF9-4B70-A69D-FC701D31B527}']
procedure OnStartPage(const AScriptingContext: IUnknown); safecall;
procedure OnEndPage; safecall; procedure Execute; safecall;
end;
// 此处有Delphi 内部注释,因为太长,不宜贴,我删除了这些注释 //
IComObjectDisp = dispinterface
['{AB671B32-0EF9-4B70-A69D-FC701D31B527}']
procedure OnStartPage(const AScriptingContext: IUnknown); dispid 1;
procedure OnEndPage; dispid 2; procedure Execute; dispid 3;
end;
// 此处有Delphi 内部注释,因为太长,不宜贴,我删除了这些注释 //
CoComObject = class
class function Create: IComObject;
class function CreateRemote(const MachineName: string): IComObject;
end;
implementation
uses ComObj;
class function CoComObject.Create: IComObject;
begin
Result := CreateComObject(CLASS_ComObject) as IComObject;
end;
class function CoComObject.CreateRemote(const MachineName: string): IComObject;
begin
Result := CreateRemoteComObject(MachineName, CLASS_ComObject) as IComObject;
end;
end.
解决方案 »
- 十分紧急,请问Delphi可以直接读取有增减项的Excel数据,再通过报表控件打印出报表吗?怎么做.
- 在其他机子上运行后,控件位置发生变动的问题,高手请指教!
- 怎么能让程序在执行时不像死机一样
- 到底是谁的错?带checkbox的treeview设计期可看到checkbox,运行期却看不到。
- 急救!急救!急救!急救!急救!急救!急救!
- dll怎样获得是谁在调用他本身,返回调用者的handle
- 那里有fastreport的使用方法(中文)?
- 请问如何只用delphi而不使用任何安装工具制作单文件的安装程序?
- 一个摸不着头脑的问题.
- actionlist与imagelist组件怎样操作才能让toolbutton显示小图标?偶试来试去,也没得逞,哪位指点一下?
- 我很爽,然后很不爽,现在爽了,希望以后不要不爽,散分!!!!!!!!
- 怎样 让程序 自己复制自己
不过自己在单元中申明对象并且创建不就可以了吗? 我写ado时直接在函数中申明的。
例如:
var
Dsp: TDataSetProvider;
Dst: TADODataSet;
begin
dsp:=TDataSetProvider.Create(self);
dst:=TAdoDataSet.Create(self);
.....tapplication 中有一个消息环,挺特殊的,不知道能不能正常运行。
tapplication并不是在所有的应用程序中都有
在你的com中可以随便使用vcl啊
而且delphi也可以把vcl控件变成ocx的
如果要添加接口在edit中点add to interface