这就是我正在做的事情:我目前需要在delphi中打开并使用.NET程序集。我正在尝试使用的程序集也有一个正在使用的对象程序集。我能够使用regasm为主程序集创建一个类型库。我还能够分配SN并将其注册到GAC。
现在,当我尝试将类型库导入delphi时,在创建pas文件后,pas文件中不会显示任何方法。我可以看到随机创建方法,但我在C#版本中创建的原始方法都没有我想不出可能导致此失败的问题。任何想法?
答案 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;