我试图通过将其作为COM类型库导入来访问Delphi中的.NET程序集(Position.dll)。一切似乎都导入OK,但生成的Position_TLB.pas文件只包含创建类的函数。没有导入任何类方法或委托。
这就是我的所作所为。
1)将Position.dll程序集添加到GAC中。
gacutil.exe -i Position.dll
2)注册程序集
regasm.exe Position.dll
3)将程序集作为类型库导入Delphi
所有导入的类看起来都像这样:
IID__MyClass: TGUID = '{F53EAE3D-9EB8-1111-B1F7-5DB609FDBEAE}';
CLASS_MyClass: TGUID = '{E15581CD-FFF5-34CE-3434-D5484798900F}';
...
_MyClass = interface;
_MyClassDisp = dispinterface;
MyClass = _MyClass;
// *********************************************************************//
// Interface: _MyClass
// Flags: (4432) Hidden Dual OleAutomation Dispatchable
// GUID: {F53EAE3D-9EB8-1111-B1F7-5DB609FDBEAE}
// *********************************************************************//
_MyClass = interface(IDispatch)
['{F53EAE3D-9EB8-1111-B1F7-5DB609FDBEAE}']
end;
...
// *********************************************************************//
// DispIntf: _MyClassDisp
// Flags: (4432) Hidden Dual OleAutomation Dispatchable
// GUID: {F53EAE3D-9EB8-3538-B1F7-5DB609FDBEAE}
// *********************************************************************//
_MyClassDisp = dispinterface
['{F53EAE3D-9EB8-1111-B1F7-5DB609FDBEAE}']
end;
...
// *********************************************************************//
// The Class CoMyClass provides a Create and CreateRemote method to
// create instances of the default interface _P2100 exposed by
// the CoClass P2100. The functions are intended to be used by
// clients wishing to automate the CoClass objects exposed by the
// server of this typelibrary.
// *********************************************************************//
CoMyClass = class
class function Create: _MyClass;
class function CreateRemote(const MachineName: string): _MyClass;
end;
...
class function CoMyClass.Create: _MyClass;
begin
Result := CreateComObject(CLASS_MyClass) as _MyClass;
end;
class function CoMyClass.CreateRemote(const MachineName: string): _MyClass;
begin
Result := CreateRemoteComObject(MachineName, CLASS_MyClass) as _MyClass;
end;
MyClass应该包含几个在TLB文件中无处可见的方法和委托。
如果我在课堂上尝试代码完成,我会看到以下内容:
我错过了一些明显的东西吗?
答案 0 :(得分:3)
这不是德尔福的“错误”,你无法解决它。
除非您想创建自己的托管DLL,否则它知道如何调用此其他托管库的托管方法,并将它们自己公开给COM。
然后正确的任务是使用registration-free COM of the dll,这样您就不必强迫用户注册您的 COM /托管dll。
我们已经使用Microsoft Great Pains完成了这项工作。我们在Visual Studio中创建自己的.dll
,它知道如何调用托管的Great Pains代码。然后将所有这些方法公开给COM。