Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.01 c
14-71833
Soft
2003-08-30 18:49
2003.09.22
Нет патентованию свободного ПО!!!


8-71769
ummax
2003-05-21 15:30
2003.09.22
TWaveHeader = record


14-71902
Е-Моё имя
2003-09-02 11:34
2003.09.22
Проблема с OLE акробата


1-71743
-AGGRESSOR-
2003-09-10 13:03
2003.09.22
OLE и потоки


1-71659
NiX
2003-09-08 17:35
2003.09.22
Доступ к свойству компонента





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский