2016-11-19 6 views
-1

[переписано, чтобы быть более понятным]с использованием ATL компонента в Delphi

Я потерял пытаюсь использовать COM-объект в Delphi. Объект был создан с использованием Visual Studio ATL.

Я испытал объект в VBScript:

Set ourObj = Server.CreateObject("JC_ATL_Q.JCsimple") 
ourJCversion = ourObj.JCversion 
Response.Write "<li>Get: JCversion = " + cstr(ourJCversion) 

В Delphi, я последовал за:

http://101.lv/learn/delphi/ch15.htm1

создать код, приведенный ниже, но при этом возникает ошибка

"Указанная процедура не может быть f ound "

Я проверил реестр, и TGUID кажутся правильными.

Я делаю правильную вещь для доступа к интерфейсу IDispatch? Есть ли способ получить дополнительную информацию о том, что происходит не так?

IJCsimple = interface(IUnknown) 
    ['{96154141-4169-4321-BADC-A08F1B2D53A4}'] 
    function get_JCversion: Integer; stdcall; 
    end; 

const 
CLASS_JCsimple: TGUID = '{6724FCDA-14F6-4D40-82A1-C8FD451BED9C}'; 

var 
    Form2: TForm2; 
    Result : variant; 

implementation 

procedure TForm2.Button1Click(Sender: TObject); 
    begin 

    Result := CreateComObject(CLASS_JCsimple) as IJCsimple; 

    end; 

end. 

Решение: Как Remy Лебо указывает, что не должен изобретать колесо, но следует использовать компонент >> Инструмент импорта компонентов >> Импорт библиотеки типов

+0

Что ваш конкретный вопрос. –

+0

Попытка доступа к собственности «Версия» вызывает исключение. Может ли кто-нибудь помочь получить эту сортировку? – jcsubmit

+0

Но в чем вопрос? Какие конкретные детали в тексте вы хотите, чтобы мы обращались. «Может ли кто-нибудь помочь», это не вопрос. –

ответ

1

Вы используете неправильное объявление для вашего метода интерфейса. Это должно выглядеть следующим образом:

type 
    IJCsimple = interface(IUnknown) 
    ['{DA13AEFD-C5A1-4A94-AD74-B9C355E1F19C}'] 
    function get_Version(out Result: Integer): HResult; stdcall; 
    property Version: Integer read get_Version; 
    end; 

Или это:

type 
    IJCsimple = interface(IUnknown) 
    ['{DA13AEFD-C5A1-4A94-AD74-B9C355E1F19C}'] 
    function Version: Integer; safecall; 
    end; 

Это, как говорится, вы не должны быть реализации интерфейсного блока вручную, чтобы начать с. Правильное решение иметь IDE импортировать TypeLibrary COM-объекта и создания правильного кода оболочки для вас:

Importing Type Library Information

+0

Спасибо! Это решает мою проблему. – jcsubmit