Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.06.2023, 08:14
infopol infopol вне форума
Прохожий
 
Регистрация: 03.06.2021
Сообщения: 35
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Создание нового типа в *_tlb.pas

Здравствуйте.Как создать новый тип ArrayStr = Array of String ,чтобы его можно было потом использовать в COM DLL?
Код:
unit Ip2Com_events_TLB;

// ************************************************************************ //
// WARNING                                                                    
// -------                                                                    
// The types declared in this file were generated from data read from a       
// Type Library. If this type library is explicitly or indirectly (via        
// another type library referring to this type library) re-imported, or the   
// 'Refresh' command of the Type Library Editor activated while editing the   
// Type Library, the contents of this file will be regenerated and all        
// manual modifications will be lost.                                         
// ************************************************************************ //

// PASTLWTR : 1.2
// File generated on 06.06.2023 7:27:03 from Type Library described below.

// ************************************************************************  //
// Type Lib: C:\Program Files (x86)\Borland\Delphi7\IP2COM\Ip2Com_events.tlb (1)
// LIBID: {51905539-63CB-439C-BA6D-B5503E313C1F}
// LCID: 0
// Helpfile: 
// HelpString: Ip2Com_events Library
// DepndLst: 
//   (1) v2.0 stdole, (C:\Windows\SysWOW64\stdole2.tlb)
// ************************************************************************ //
{$TYPEDADDRESS OFF} // Unit must be compiled without type-checked pointers. 
{$WARN SYMBOL_PLATFORM OFF}
{$WRITEABLECONST ON}
{$VARPROPSETTER ON}
interface

uses Windows, ActiveX, Classes, Graphics, StdVCL, Variants;
  

// *********************************************************************//
// GUIDS declared in the TypeLibrary. Following prefixes are used:        
//   Type Libraries     : LIBID_xxxx                                      
//   CoClasses          : CLASS_xxxx                                      
//   DISPInterfaces     : DIID_xxxx                                       
//   Non-DISP interfaces: IID_xxxx                                        
// *********************************************************************//
const
  // TypeLibrary Major and minor versions
  Ip2Com_eventsMajorVersion = 1;
  Ip2Com_eventsMinorVersion = 0;

  LIBID_Ip2Com_events: TGUID = '{51905539-63CB-439C-BA6D-B5503E313C1F}';

  IID_IIp2Com: TGUID = '{3AF54457-3687-4C2F-8ACD-D31B0ACAAE77}';
  CLASS_Ip2Com: TGUID = '{C2D06CF9-F5DF-4FF1-B32A-955FB4108CBF}';

// *********************************************************************//
// Declaration of Enumerations defined in Type Library                    
// *********************************************************************//
// Constants for enum Version
type
  Version = TOleEnum;
const
  Major = $00000001;
  Minor = $00000001;

type

// *********************************************************************//
// Forward declaration of types defined in TypeLibrary                    
// *********************************************************************//
  IIp2Com = interface;
  IIp2ComDisp = dispinterface;

// *********************************************************************//
// Declaration of CoClasses defined in Type Library                       
// (NOTE: Here we map each CoClass to its Default Interface)              
// *********************************************************************//
  Ip2Com = IIp2Com;


// *********************************************************************//
// Declaration of structures, unions and aliases.                         
// *********************************************************************//
  PWordBool1 = ^WordBool; {*}
  PWideString1 = ^WideString; {*}
  POleVariant1 = ^OleVariant; {*}

  RecordArray = packed record
  end;

  UnionArray = record
  end;


// *********************************************************************//
// Interface: IIp2Com
// Flags:     (6464) Dual OleAutomation Replaceable Dispatchable
// GUID:      {3AF54457-3687-4C2F-8ACD-D31B0ACAAE77}
// *********************************************************************//
  IIp2Com = interface(IDispatch)

Вставляю в код,но после сохранение этот тип удаляется.
Ответить с цитированием
  #2  
Старый 06.06.2023, 09:32
rand rand вне форума
Прохожий
 
Регистрация: 12.05.2023
Адрес: Томск
Сообщения: 2
Версия Delphi: Delphi 11
Репутация: 10
По умолчанию

Редактировать самому *_TLB.pas наверно не стоит.
Там в первом блоке комментариев написано почти на русском "the contents of this file will be regenerated and all manual modifications will be lost"

Этот файл все таки обертка к Ip2Com_events Library и добавлять в pas файл что-то свое - стоит 100 раз подумать.
Попробуй как то по другому.
Ответить с цитированием
Этот пользователь сказал Спасибо rand за это полезное сообщение:
infopol (06.06.2023)
  #3  
Старый 06.06.2023, 12:46
infopol infopol вне форума
Прохожий
 
Регистрация: 03.06.2021
Сообщения: 35
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Значит буду думать

Хотел создать функцию которая принимает и возвращает ArrayString
Ответить с цитированием
  #4  
Старый 06.06.2023, 19:13
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, для начала - String не COM safe тип.
Во вторых, как тебе уже сказали, просто добавить свою функцию в существующую библиотеку нельзя. Ведь _TLB это всего лишь описание интерфейса существующего COM-объекта. Т.е. добавление этой функции в _TLB не добавит эту функцию в сам объект и, как следствие, она будет удалена при следующем реимпорте библиотеки.
Что можно сделать - создать свой модуль (обычный), в котором реализовать соотв. функцию, а она уже внутри будет вызывать соотв. COM объект. В принципе, если этот фнукционал нужен в нескольких проектых и очень хочется "закрыть" его, то можно создать свой COM-объект, в нем реализовать соотв. интерфейс и имлементацию и уже внутри имлементации вызывать существующий COM-объект. Т.е. получается как бы еще один слой обертки.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
infopol (07.06.2023)
  #5  
Старый 07.06.2023, 06:53
infopol infopol вне форума
Прохожий
 
Регистрация: 03.06.2021
Сообщения: 35
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Сделал так

Код:
  function F_MyFunction(const aFile: WideString;var res:Array of string ): WordBool; safecall;

uses ComServ;
function TIP2COM.F_MyFunction(const aFile: WideString;var res:Array of string ): WordBool; safecall;
begin
  result:=False;
end;
Но выдается в приложении, что метод F_MyFunction не найден

Последний раз редактировалось infopol, 07.06.2023 в 07:04.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:07.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter