在Delphi中没有从导入的类型库中显示的方法

时间:2009-08-07 20:59:17

标签: c# delphi dll types

这就是我正在做的事情:我目前需要在delphi中打开并使用.NET程序集。我正在尝试使用的程序集也有一个正在使用的对象程序集。我能够使用regasm为主程序集创建一个类型库。我还能够分配SN并将其注册到GAC。

现在,当我尝试将类型库导入delphi时,在创建pas文件后,pas文件中不会显示任何方法。我可以看到随机创建方法,但我在C#版本中创建的原始方法都没有我想不出可能导致此失败的问题。任何想法?

1 个答案:

答案 0 :(得分:1)

整个COM系统围绕接口。基本上,您需要更改程序集中的类以实现包含您要调用的方法的接口。然后,您将能够在程序集中创建每个类的实例作为Delphi的接口,并以这种方式调用方法。

例如:

// In the assembly
public interface IMyInterface
{
    void DoSomething();
}

public class MyImplementingClass : IMyInterface
{
    void DoSomething()
    {
        //
    }
}

现在,您的PAS文件将获得一个包含DoSomething方法和几个GUID的接口声明。

要从Delphi调用此方法,您将使用与此类似的代码:

procedure CallDoSomething;
var
  hr: HResult;
  Intf: IMyInterface;
  TypeLib: ITypeLib;
begin
  OLECHECK(LoadRegTypeLib(LIBID_MyAssembly, MyAssemblyMajorVersion, MyAssemblyMinorVersion, 0, TypeLib));

  Intf := nil;
  hr := CoCreateInstance(CLASS_MyImplementingClass, nil, CLSCTX_INPROC_SERVER, IID_IMyInterface, Intf);
  if Failed(hr) then
    raise Exception.CreateFmt('Failed to create instance of interface. (%x)', [hr]);

  Intf.DoSomething();
end;