gpt4 book ai didi

.net - 将 .NET 程序集类型库导入 Delphi 不会生成过程

转载 作者:行者123 更新时间:2023-12-03 18:32:58 25 4
gpt4 key购买 nike

我正在尝试通过将其作为 COM 类型库导入来访问 Delphi 中的 .NET 程序集 (Position.dll)。一切似乎都可以导入,但生成的 Position_TLB.pas 文件仅包含创建类的函数。没有导入任何类方法或委托(delegate)。

这就是我所做的。

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 文件中看不到的方法和委托(delegate)。

如果我在类里面尝试代码完成,我会看到以下内容:

enter image description here

我错过了一些明显的东西吗?

最佳答案

我也遇到过。不幸的是,您仅限于已添加到嵌入式类型库的内容。

这不是 Delphi 的“故障”,您无法修复它。

除非您想创建自己的托管 DLL,否则它知道如何调用其他托管库的托管方法,并且您自己将它们公开给 COM。

那么正确的任务是使用registration-free COM of the dll这样您就不必强制您的用户注册您的 COM/托管 dll。

我们已经用 Microsoft Great Pains 完成了.我们创建自己的.dll在知道如何调用托管 Great Pains 代码的 Visual Studio 中。然后将所有这些方法公开给 COM。

关于.net - 将 .NET 程序集类型库导入 Delphi 不会生成过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10427101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com