Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2008, 11:25   #1
Nikuzkin
 
Регистрация: 10.06.2008
Сообщений: 6
Лампочка не получается программирование COM

Завожу примеры создания COM приложения приведенные в книгах: Архангельский "Программирование в Delphi 6" и Бобровский "Учебный курс по Delphi 7". Они практически идентичны. Завел сервер. Компилируется. Зато при создании СОМ объекта, на этапе написания Interface1:=CoMyObject.Create не идентифицируется класс CoMyObject. Понимаю что гдето в книгах упущена связка, но докикать не могу. Может ктото сталкивался с такими опечатками или возможно, я чтото не заметил Но поверьте уже набираю не один десяток раз. Help me!
Nikuzkin вне форума Ответить с цитированием
Старый 10.06.2008, 15:08   #2
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

А ты уверен, что все здесь читали эти книги? Я, например, точно не читал. Выкладывай код, посмотрим.
Баламут вне форума Ответить с цитированием
Старый 10.06.2008, 17:21   #3
Demion
 
Регистрация: 10.06.2008
Сообщений: 5
По умолчанию

Посмотри, зареген ли Com-сервер. (При написании COM-сервера в меню кликни на RegisterComServer).
В головной проге подруби модуль с интерфейсом
Для создания ссылки на интерфейс:
<Имя переменной типа интерфейс>:=CreateComObject(<Guid класса>) as <имя интерфейса>
Demion вне форума Ответить с цитированием
Старый 10.06.2008, 17:24   #4
Nikuzkin
 
Регистрация: 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.
Nikuzkin вне форума Ответить с цитированием
Старый 10.06.2008, 17:25   #5
Nikuzkin
 
Регистрация: 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.
Nikuzkin вне форума Ответить с цитированием
Старый 10.06.2008, 17:29   #6
Nikuzkin
 
Регистрация: 10.06.2008
Сообщений: 6
По умолчанию не получается программирование СОМ

Мои извинения за закоментирванные функции. Это следы моих попыток втемяшить переменную в разные места (в книге плохо описан этот момент поэтому пробовал методом тыка). в реальности поочередно пробовал поместить ее в те места где потом закоментировал
Nikuzkin вне форума Ответить с цитированием
Старый 11.06.2008, 13:49   #7
Ring0Sn
Форумчанин
 
Аватар для Ring0Sn
 
Регистрация: 06.09.2007
Сообщений: 239
По умолчанию

Цитата:
Сообщение от Nikuzkin Посмотреть сообщение
на этапе написания Interface1:=CoMyObject.Create не идентифицируется класс CoMyObject
и небудет, метод Create, в классе CoMyObject, оперирует самим классом (class of), а не екземпляром обьекта
----
кури инфу про метаклассы

Последний раз редактировалось Ring0Sn; 11.06.2008 в 13:56.
Ring0Sn вне форума Ответить с цитированием
Старый 11.06.2008, 13:59   #8
Nikuzkin
 
Регистрация: 10.06.2008
Сообщений: 6
По умолчанию

цитата
"и небудет, метод Create, в классе CoMyObject, оперирует самим классом (class of), а не екземпляром обьекта"

Спасибо за ответ. Поколупаюсь с ошибкой, уверен, что теперь все получится.

П.С.
Мне понравилась цитата Руставели приведенная тобой:
"Чем меньше ты знаешь, тем легче тобой управлять (с) Руставели." Сильно звучит, да и не только звучит!! Сильная сама по себе.
Nikuzkin вне форума Ответить с цитированием
Старый 11.06.2008, 14:01   #9
Nikuzkin
 
Регистрация: 10.06.2008
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Demion Посмотреть сообщение
Посмотри, зареген ли Com-сервер. (При написании COM-сервера в меню кликни на RegisterComServer).
В головной проге подруби модуль с интерфейсом
Для создания ссылки на интерфейс:
<Имя переменной типа интерфейс>:=CreateComObject(<Guid класса>) as <имя интерфейса>
Спасибо за помощь. теперь выплыву
Nikuzkin вне форума Ответить с цитированием
Старый 11.06.2008, 14:23   #10
Ring0Sn
Форумчанин
 
Аватар для Ring0Sn
 
Регистрация: 06.09.2007
Сообщений: 239
По умолчанию

Nikuzkin, стучи в асю если несправишься, помогу возможно если время неподожмет...
Ring0Sn вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не получается запрос с 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