![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 10.06.2008
Сообщений: 6
|
![]()
Завожу примеры создания COM приложения приведенные в книгах: Архангельский "Программирование в Delphi 6" и Бобровский "Учебный курс по Delphi 7". Они практически идентичны. Завел сервер. Компилируется. Зато при создании СОМ объекта, на этапе написания Interface1:=CoMyObject.Create не идентифицируется класс CoMyObject. Понимаю что гдето в книгах упущена связка, но докикать не могу. Может ктото сталкивался с такими опечатками или возможно, я чтото не заметил Но поверьте уже набираю не один десяток раз. Help me!
|
![]() |
![]() |
![]() |
#2 |
Баламучу слегка...
Участник клуба
Регистрация: 01.11.2006
Сообщений: 1,585
|
![]()
А ты уверен, что все здесь читали эти книги? Я, например, точно не читал. Выкладывай код, посмотрим.
|
![]() |
![]() |
![]() |
#3 |
Регистрация: 10.06.2008
Сообщений: 5
|
![]()
Посмотри, зареген ли Com-сервер. (При написании COM-сервера в меню кликни на RegisterComServer).
В головной проге подруби модуль с интерфейсом Для создания ссылки на интерфейс: <Имя переменной типа интерфейс>:=CreateComObject(<Guid класса>) as <имя интерфейса> |
![]() |
![]() |
![]() |
#4 |
Регистрация: 10.06.2008
Сообщений: 6
|
![]()
высылаю файлы. Если чтото сделал так что непонятка получается прошу подсказать, вышлю правильней.
![]() ![]() library Project1; uses ComServ, Project1_TLB in 'Project1_TLB.pas', Unit1 in 'Unit1.pas' {TestObj: CoClass}; exports DllGetClassObject, DllCanUnloadNow, DllRegisterServer, DllUnregisterServer; {$R *.TLB} {$R *.RES} begin end. unit Project1_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 10.06.2008 10:49:13 from Type Library described below. // *********************************** *********************************** ** // // Type Lib: C:\Program Files\Borland\Delphi7\Projects\Proj ect1.tlb (1) // LIBID: {47388C0D-F331-4B6B-8CD0-9F0DD109CEE3} // LCID: 0 // Helpfile: // HelpString: Project1 Library // DepndLst: // (1) v2.0 stdole, (C:\WINDOWS\system32\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 Project1MajorVersion = 1; Project1MinorVersion = 0; LIBID_Project1: TGUID = '{47388C0D-F331-4B6B-8CD0-9F0DD109CEE3}'; IID_ITestObj: TGUID = '{616E7288-181A-4AF2-A487-BF014578F0DE}'; CLASS_TestObj: TGUID = '{2617A26A-3417-45D8-B739-5E3FBE97477D}'; type // *********************************** **********************************// // Forward declaration of types defined in TypeLibrary // *********************************** **********************************// ITestObj = interface; // *********************************** **********************************// // Declaration of CoClasses defined in Type Library // (NOTE: Here we map each CoClass to its Default Interface) // *********************************** **********************************// TestObj = ITestObj; // *********************************** **********************************// // Interface: ITestObj // Flags: (256) OleAutomation // GUID: {616E7288-181A-4AF2-A487-BF014578F0DE} // *********************************** **********************************// ITestObj = interface(IUnknown) ['{616E7288-181A-4AF2-A487-BF014578F0DE}'] function GetSum(S1: SYSINT; S2: SYSINT): SYSINT; stdcall; end; // *********************************** **********************************// // The Class CoTestObj provides a Create and CreateRemote method to // create instances of the default interface ITestObj exposed by // the CoClass TestObj. The functions are intended to be used by // clients wishing to automate the CoClass objects exposed by the // server of this typelibrary. // *********************************** **********************************// CoTestObj = class class function Create: ITestObj; class function CreateRemote(const MachineName: string): ITestObj; end; implementation uses ComObj; class function CoTestObj.Create: ITestObj; begin Result := CreateComObject(CLASS_TestObj) as ITestObj; end; class function CoTestObj.CreateRemote(const MachineName: string): ITestObj; begin Result := CreateRemoteComObject(MachineName, CLASS_TestObj) as ITestObj; end; end. |
![]() |
![]() |
![]() |
#5 |
Регистрация: 10.06.2008
Сообщений: 6
|
![]()
unit Unit2;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls,Project1_TLB; type TForm2 = class(TForm) Edit1: TEdit; Edit2: TEdit; Button1: TButton; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } // II, TestObjInterface: ITestObject; end; var Form2: TForm2; // II: ITestObject; TestObjInterface: ITestObject; implementation {$R *.dfm} procedure TForm2.FormCreate(Sender: TObject); begin II:=CoTestObject. //здесь не вижу переменной. поэтому не писал //продолжение за точкой end; end. |
![]() |
![]() |
![]() |
#6 |
Регистрация: 10.06.2008
Сообщений: 6
|
![]()
Мои извинения за закоментирванные функции. Это следы моих попыток втемяшить переменную в разные места (в книге плохо описан этот момент поэтому пробовал методом тыка). в реальности поочередно пробовал поместить ее в те места где потом закоментировал
|
![]() |
![]() |
![]() |
#7 | |
Форумчанин
Регистрация: 06.09.2007
Сообщений: 239
|
![]() Цитата:
---- кури инфу про метаклассы Последний раз редактировалось Ring0Sn; 11.06.2008 в 13:56. |
|
![]() |
![]() |
![]() |
#8 |
Регистрация: 10.06.2008
Сообщений: 6
|
![]()
цитата
"и небудет, метод Create, в классе CoMyObject, оперирует самим классом (class of), а не екземпляром обьекта" Спасибо за ответ. Поколупаюсь с ошибкой, уверен, что теперь все получится. П.С. Мне понравилась цитата Руставели приведенная тобой: "Чем меньше ты знаешь, тем легче тобой управлять (с) Руставели." Сильно звучит, да и не только звучит!! Сильная сама по себе. |
![]() |
![]() |
![]() |
#9 | |
Регистрация: 10.06.2008
Сообщений: 6
|
![]() Цитата:
![]() |
|
![]() |
![]() |
![]() |
#10 |
Форумчанин
Регистрация: 06.09.2007
Сообщений: 239
|
![]()
Nikuzkin, стучи в асю если несправишься, помогу возможно если время неподожмет...
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
не получается запрос с inner join :mad: | Только_Учусь | SQL, базы данных | 16 | 21.07.2008 09:40 |
не получается сортировка кто знает помогите | Droid | Общие вопросы Delphi | 5 | 23.05.2008 07:28 |
Не получается..... | Delpher | HTML и CSS | 2 | 25.12.2007 13:17 |
Не получается вывести график | RECREATOR | Общие вопросы Delphi | 7 | 23.12.2007 01:23 |
Не получается прочитать из файла...( | Regloger | Помощь студентам | 3 | 09.12.2007 14:23 |