Как реализовать байт Delphi в IUnknown - PullRequest
0 голосов
/ 25 января 2019

Я создаю сервер ActiveX в Delphi для замены собственной библиотеки DLL, созданной в Delphi, чтобы ее можно было вызывать в .NET.(Я новичок в Delphi и больше из C #)

Прототип процедуры в исходном источнике DLL:

procedure Log(Device: byte); StdCall;

Используя панель дизайна в Delphi, я получаю.REDL, который расширяет IUnkown этого:

interface IDelphiCom: IUnknown
  {
    [id(0x00000065)]
    HRESULT _stdcall Log([in] byte Device);
  };

Для реализации у меня есть это:

interface
type
  TTestCom = class(TTypedComObject, IDelphiCom)
  protected
    function Log(Device: byte ): HResult; StdCall;
 end;

implementation
function TTestCom.Log(Device: byte): HRESULT; StdCall;
begin
  result:=0;
end;

Я пробовал много разных комбинаций типа данных в .ridl и реализации,но всегда появляется сообщение об ошибке, что функция Log не реализована:

[ошибка dcc32] Unit1.pas (12): E2291 Отсутствует реализация метода интерфейса IDelphiCom.Log

Есть ли комбинация, которая работает, или какой-то другой способ решить эту проблему?У кого-нибудь есть таблица, которая перекрестно ссылается на типы данных IUnkown к типам данных Delphi?Есть ли какое-то дополнение для Delphi / Rad Studio, такое как ReSharper, которое бы реализовывало заглушки элементов интерфейса?Я уже выяснил несколько преобразований типов данных, но я застрял на простейшем байте.

1 Ответ

0 голосов
/ 25 января 2019

Я обнаружил, что мне нужно использовать unsigned char в .ridl и byte в реализации.Я нашел ответ здесь и более общую информацию об API и Delphi здесь .

...