powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ошибочный импорт tlb в Delphi 7
3 сообщений из 3, страница 1 из 1
Ошибочный импорт tlb в Delphi 7
    #39705634
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть моя idl, с кучей объявленных интерфейсов и сложной иерархией наследования.

Среди них такая иерархия
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
  [
    uuid(F5C577DF-8A01-4F44-A66A-7D14738CF069),
    version(1.0),
    oleautomation
  ]
   interface IChildItem: IUnknown
  {
    ....................
  };

  [
    uuid(8A453698-76DF-4926-830A-F3A46CF85D5E),
    version(1.0),
    oleautomation
  ]
   interface INamedItem: IChildItem
  {
    ....................
  };

  [
    uuid(5D83E4F8-AE73-40BE-9372-E919EFAB7A8D),
    version(1.0),
    oleautomation
  ]
   interface IPropObj: INamedItem
  {
    ....................
  };

  [
    uuid(16BEDBAC-7A58-4FED-9F1C-DFA47CAA8BA8),
    version(1.0),
    oleautomation
  ]
   interface ISysObj: IPropObj
//   interface IrsSysObj: INamedItem
  {
    HRESULT _stdcall Get_ID([out] __int64 * AOut);
}



При генерации pas модулей из скомпилированной tlb утилитой tlibimp.exe от Delphi 7. В одном интерфейсе появляются фейковые методы
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
  ISysObj = interface(IPropObj)
    ['{16BEDBAC-7A58-4FED-9F1C-DFA47CAA8BA8}']
    function GhostMethod_ISysObj_0_1: HResult; stdcall;
    function GhostMethod_ISysObj_4_2: HResult; stdcall;
    function GhostMethod_ISysObj_8_3: HResult; stdcall;
    function GhostMethod_ISysObj_12_4: HResult; stdcall;
    function GhostMethod_ISysObj_16_5: HResult; stdcall;
    function GhostMethod_ISysObj_20_6: HResult; stdcall;
    function GhostMethod_ISysObj_24_7: HResult; stdcall;
    function GhostMethod_ISysObj_28_8: HResult; stdcall;
    function GhostMethod_ISysObj_32_9: HResult; stdcall;
    function GhostMethod_ISysObj_36_10: HResult; stdcall;
    function GhostMethod_ISysObj_40_11: HResult; stdcall;
    function GhostMethod_ISysObj_44_12: HResult; stdcall;
    function GhostMethod_ISysObj_48_13: HResult; stdcall;
    function GhostMethod_ISysObj_52_14: HResult; stdcall;
    function GhostMethod_ISysObj_56_15: HResult; stdcall;
    function GhostMethod_ISysObj_60_16: HResult; stdcall;
    function Get_ID(out AOut: Int64): HResult; stdcall;
end;

количество этих методов равно суммарному количеству методов во всех родительских интерфейсах, включая IUnknown

Если я этот интерфейс наследую не от IPropObj а от INamedItem методы пропадают. Если в IPropObj убрать все методы, то просто уменьшается количество фейковых методов

Если объявить копию интерфейса ISysObj
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
  [
    uuid(36740E17-768E-49D9-987B-CEB5E64AB528),
    version(1.0),
    oleautomation
  ]
   interface ISysObj2: IPropObj
  {
    HRESULT _stdcall Get_ID([out] __int64 * AOut);
  }


То в этой копии никаких дополнительных методов не появляется.

В чем может быть баг? Использование tlibimp от других версий методы также не добавляет

С уважением, Vasilisk
...
Рейтинг: 0 / 0
Ошибочный импорт tlb в Delphi 7
    #39705646
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот что нагуглилось:


здесь предполагают, что баг появился в Delphi 7 Update 1 и предлагают попробовать "tlibimp.exe and tlib70.bpl from original Delphi 7 CD"
http://borland.public.delphi.oleautomation.narkive.com/qwqnSlKz/migrating-d6-d7-major-issues-with-coms-written-in-vb

а здесь не разобрались в причинах и предлагают утилиту GhostHunter (правда там ссылка уже битая), которая удалит фейковые методы
http://www.delphigroups.info/2/9f/214719.html
...
Рейтинг: 0 / 0
Ошибочный импорт tlb в Delphi 7
    #39705669
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик Семёнздесь предполагают, что баг появился в Delphi 7 Update 1 и предлагают попробовать "tlibimp.exe and tlib70.bpl from original Delphi 7 CD"Все с точностью до наоборот

Автор изначально писал на D6 и у него были эти методы. Потом он переполз на D7, методы пропали и у него все сломалось.

А ему говорят, что Ghost методы починили в D7.1 и если ему нужно их вернуть, то советуют использовать tlibimp от D7

Кроик Семёна здесь не разобрались в причинахСейчас меня интересует именно причина
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ошибочный импорт tlb в Delphi 7
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]