Проблема с Com-объектом
От: systopler  
Дата: 15.08.07 10:11
Оценка:
Всем привет!!!
Я жил, не тужил, народу помогал , короче был хорошим и послушным, но тут случилось бяка…
А бяка заключалась в том, что мне дали Dll-ку с которой мне нуна активно поработать

Я не долго думая сделал «Import Component», в результате получил файл *_TLB.pas, который подключил к своему проекту.

IObjDB = interface(IUnknown)
['{9B1611B2-F442-47B3-BE6E-463C82F28F6F}']
….
CoObjDB = class
class function Create: IObjDB;
class function CreateRemote(const MachineName: string): IObjDB;
end;



Бросил на форму кнопарь и прописал следующий код:
procedure TForm1.Button1Click(Sender: TObject);
var
v : IObjDB;
a : CoObjDB;
begin
v := a.Create;
end;

Думал, что вот оно – счастье, а нет, оказалась «Ж»…

при выполнении этого кода вылетает ошибка…
что тока не делал... даже мышку почистил, но не помогло...
Какой необходимо исполнить танец с бубном, чтобы заработало?
Re: Проблема с Com-объектом
От: ironwit Украина  
Дата: 15.08.07 11:56
Оценка:
systopler wrote:


а так?
> procedure TForm1.Button1Click(Sender: TObject);
> var
> v : IObjDB;
> begin
> v := CoObjDB.Create;
> end;

или я чего то не досмотрел или одно из двух
Posted via RSDN NNTP Server 2.1 beta
Я не умею быть злым, и не хочу быть добрым.
Re[2]: Проблема с Com-объектом
От: systopler  
Дата: 16.08.07 02:50
Оценка:
Здравствуйте, ironwit, Вы писали:

I>systopler wrote:


I>а так?

>> procedure TForm1.Button1Click(Sender: TObject);
>> var
>> v : IObjDB;
>> begin
>> v := CoObjDB.Create;
>> end;

I>или я чего то не досмотрел или одно из двух


результат тот же самый
Re: Проблема с Com-объектом
От: Tilir Россия http://tilir.livejournal.com
Дата: 16.08.07 07:03
Оценка:
Здравствуйте, systopler, Вы писали:

S>Бросил на форму кнопарь и прописал следующий код:

S>procedure TForm1.Button1Click(Sender: TObject);
S>var
S> v : IObjDB;
S> a : CoObjDB;
S>begin
S> v := a.Create;
S>end;
S>при выполнении этого кода вылетает ошибка…

Во-первых поскольку Create это class function делать объект не нужно, то есть v := CoObjDB.Create; Вы сделали объект a, который по правилам Delphi nil до конструирования и разумеется на попытке вызова его метода вылетаете с AV.

Но вам уже эт посоветовали и как я понял не помгло. Значит попробуйте ещё вот так:

procedure TForm1.Button1Click(Sender: TObject);
var
   v  : IObjDB;
begin
   v  := CreateComObject(CLSID_ObjDB) as IObjDB;
end;


Здесь CLSID_ObjDB — GUID вашего кокласса, я не уверен что он именно так называется, подсмотрите его в TLB.

Если при таком раскладе тоже будет вылетать ошибка, значит ошибка внутри кода COM-сервера и с клиентской стороны вы её никак не решите.
Re[2]: Проблема с Com-объектом
От: systopler  
Дата: 16.08.07 07:12
Оценка:
Здравствуйте, Tilir, Вы писали:

T>Во-первых поскольку Create это class function делать объект не нужно, то есть v := CoObjDB.Create; Вы сделали объект a, который по правилам Delphi nil до конструирования и разумеется на попытке вызова его метода вылетаете с AV.


T>Но вам уже эт посоветовали и как я понял не помгло. Значит попробуйте ещё вот так:


T>
T>procedure TForm1.Button1Click(Sender: TObject);
T>var
T>   v  : IObjDB;
T>begin
T>   v  := CreateComObject(CLSID_ObjDB) as IObjDB;
T>end;
T>


T>Здесь CLSID_ObjDB — GUID вашего кокласса, я не уверен что он именно так называется, подсмотрите его в TLB.


T>Если при таком раскладе тоже будет вылетать ошибка, значит ошибка внутри кода COM-сервера и с клиентской стороны вы её никак не решите.


Не помогло. Ошибка таже самая
VBA, C# отлично работают с этим Com-ом, а вот Delphi не хочет
Re[3]: Проблема с Com-объектом
От: Mckey Россия  
Дата: 17.08.07 12:58
Оценка:
Здравствуйте, systopler, Вы писали:

S>Здравствуйте, Tilir, Вы писали:


T>>Во-первых поскольку Create это class function делать объект не нужно, то есть v := CoObjDB.Create; Вы сделали объект a, который по правилам Delphi nil до конструирования и разумеется на попытке вызова его метода вылетаете с AV.


T>>Но вам уже эт посоветовали и как я понял не помгло. Значит попробуйте ещё вот так:


T>>
T>>procedure TForm1.Button1Click(Sender: TObject);
T>>var
T>>   v  : IObjDB;
T>>begin
T>>   v  := CreateComObject(CLSID_ObjDB) as IObjDB;
T>>end;
T>>


T>>Здесь CLSID_ObjDB — GUID вашего кокласса, я не уверен что он именно так называется, подсмотрите его в TLB.


T>>Если при таком раскладе тоже будет вылетать ошибка, значит ошибка внутри кода COM-сервера и с клиентской стороны вы её никак не решите.


S>Не помогло. Ошибка таже самая

S>VBA, C# отлично работают с этим Com-ом, а вот Delphi не хочет

Попробуйте добавить:

...

initialization
  CoInitialize(nil);
  
finalization
  CoUninitialize;

end.
Делай добро и бросай его в воду...
Re[4]: Проблема с Com-объектом
От: systopler  
Дата: 17.08.07 13:13
Оценка:
Здравствуйте, Mckey, Вы писали:


M>Попробуйте добавить:


M>
M>...

M>initialization
M>  CoInitialize(nil);
  
M>finalization
M>  CoUninitialize;

M>end.
M>


Результат тотже
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.