Из Delphi Library в Delphi не отображаются методы - PullRequest
0 голосов
/ 08 августа 2009

Это то, что я делаю: мне нужно открыть и использовать сборку .NET в Delphi. Сборка, которую я пытаюсь использовать, также содержит сборку объектов, которые она использует. Я смог использовать regasm для создания библиотеки типов для основной сборки. Я также смог назначить SN и зарегистрировать его в GAC.

Теперь, когда я пытаюсь импортировать библиотеку типов в delphi, после создания файла pas в файле pas не отображаются никакие методы. Я вижу случайные методы создания, но ни один из оригинальных методов, которые я создал в версии C #, не могу придумать, в чем может быть проблема, приводящая к сбою. Есть идеи?

1 Ответ

1 голос
/ 08 августа 2009

Вся система 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;
...