Форум: "Основная";
Текущий архив: 2003.09.22;
Скачать: [xml.tar.bz2];
ВнизНекорректный импорт библиотеки типов Найти похожие ветки
← →
qwerty2 (2003-09-10 17:55) [0]Создаю COM объект на основе следующего интерфейса:
IMyInterface = interface(IUnknown)
["{0E9AE65A-6C30-4E68-92CE-06A44853AE2B}"]
function Funk1(i: SYSINT): WideString; stdcall;
function Funk2: HResult; stdcall;
function Funk3(i: Shortint): HResult; stdcall;
function Funk4: HResult; stdcall;
//....
function Get_Proper1: Shortint; stdcall;
procedure Set_Proper1(Param1: Shortint); stdcall;
property Proper1:shortint read Get_Proper1 write Set_Proper1;
при импорте библиотеки типов этого объекта Delphi создает из этого следующее:
IMyInterface = interface(IUnknown)
["{0E9AE65A-6C30-4E68-92CE-06A44853AE2B}"]
function Funk1(i: SYSINT): WideString; stdcall;
function Funk2: HResult; stdcall;
function Funk3(i: Shortint): HResult; stdcall;
function Funk4: HResult; stdcall;
//....
function Get_Proper1: Shortint; stdcall;
function Set_Proper1(Param1: Shortint): HResult; stdcall;
при изменении сгенерированого кода на исходный работает все правильно. почему же Delphi не может сгенерировать код идентичный исходному?
← →
Calm (2003-09-10 18:23) [1]Хм.. IMHO по той же причине, что не дает получить паскалевский исходник из скомпилированного exe-шника
← →
qwerty2 (2003-09-10 18:47) [2]Да еще такая проблема. при попытке использовать этот объект из VB, вызов любого метода сопровождается ошибкой "Функция может быть использована только ограниченно или использует тип автоматизации, не поддерживаемый VB". как сделать обект таким чтоб он поддерживался и VB? ведь все (или большинство) COM объекты работают то с VB нормально.
← →
nikkie (2003-09-10 19:17) [3]>как сделать обект таким чтоб он поддерживался и VB?
использовать только типы, которые поддерживает VB. где-то я встречал такой список. потом мне кажется, что методы должны всегда возвращать HRESULT.
еще не понятно, как ты делаешь этот интерфейс и библиотеку типов. не руками же?
← →
Nikolay M. (2003-09-10 21:59) [4]У меня тоже такое смутное подозрение, что type library здесь создается руками...
← →
Тих (2003-09-10 22:08) [5]Хто такой тип SYSINT??? Это разве Ole-automation тип? потому и глюки.
← →
qwerty2 (2003-09-10 22:56) [6]
> еще не понятно, как ты делаешь этот интерфейс и библиотеку
> типов. не руками же?
приходится руками подправлять. редактор библиотеки типов который имеется в Delphi почему то не позволяет объявить свойство в библиотеке типов. если выбрать в редакторе "New-Property" то генерируются только get и set методы для свойства а само свойство не объявляется! или я что не так делаю...
← →
nikkie (2003-09-10 23:07) [7]попробуй все-таки руками туда не лезть. IDL у тебя должен получаться такой:
interface IMyClass: IUnknown
{
[propget, id(0x00000004)]
HRESULT _stdcall Property1([out, retval] long * Value );
[propput, id(0x00000004)]
HRESULT _stdcall Property1([in] long Value );
[id(0x00000002)]
HRESULT _stdcall Method1( void );
};
если после этого все равно будут проблемы с импортом в vb, тогда и поговорим.
← →
Тих (2003-09-10 23:30) [8]VB _не_понимает_ не-oleautomation типы, и, мало того, при ошибке в одном из методов в объявлении интерфейса, не будут работать и остальные. Это во-первых. Во-вторых, свойства генерируются только для диспинтерфейсов, т.е. в мастере ActiveX нужно выбирать не New->COM Object, а New->Automation Object, затем в редакторе библиотеки типов редактировать именно диспинтерфейс.
← →
Тих (2003-09-10 23:31) [9]IMyInterface = interface(IUnknown)
... а у тебя явно интерфейс наследуется от IUnknown. Какие же тут могут быть проперти?
← →
nikkie (2003-09-10 23:58) [10]свойства генерируются только для диспинтерфейсов
... а у тебя явно интерфейс наследуется от IUnknown. Какие же тут могут быть проперти?
это ты чего-то загнул.
← →
Тих (2003-09-11 00:21) [11]В самом деле тороможу, пардон. Глянул в IDL, который генерирует ATL, а там ключевое слово "property" только для интерфейсов с аттрибутом dispinterface, про propget/propput и позабыл... пойду наверстывать.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.09.22;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.14 c