com-обьект, позднее связывание, передача ADOConnection

Myster
Дата: 12.10.2006 13:05:34
Доброго дня всем :)

может кто знает как поступить в следующей ситуации:

есть com-обьект с процедурой XXX
поздним связыванием вызывается его процедура XXX в которую надо передать обьект ADOConnection, но так его передать нельзя то надо передать указатель на ADOConnection и вот как это сделать? (ConnectionString передавать нельзя)

при раннем связывании все просто: в процедуре XXX входной параметр типа SYSINT а вызывается она соответственно XXX(Pointer(ADOConnection1))
при позднем не работает:(( выдает ошибку: "[Error]: Type not allowed in Variant Dispatch call"

что делать? (читать книжки по Делфи это понятно, но не нашла) может кто подсказать?
Андрей Спильный
Дата: 12.10.2006 13:14:27
[quot Myster]Доброго дня всем :)
quot]
замечу, что вообще то стоит передавать в другой процесс не экземпляр класса Delphi, а интерфейсную ссылку
в противном случае, при попытке привести его к конкретному типу вы получите ошибку
ну а ошибку в случае передачи параметров нестандартного типа при позднем связывании вы уже видели

в данном случае следует использовать не TAdoConnection, а ADOConnection.ConnectionObject
Myster
Дата: 12.10.2006 14:10:55
теперь ошибка: неверный тип переменной

в процедуре XXX переменная типа SYSINT

а передаю я XXX(sysint(pointer(ADOConnection1.ConnectionObject))) или XXX(sysint(pointer(ADOConnection1))) всеравно одная и та же ошибка
Petro123
Дата: 12.10.2006 14:17:19
Myster
(ConnectionString передавать нельзя)

почему?

2. Чем проще тем лучше
var
  v : variant;
v := ADOConnection1.ConnectionObject;
 XXX(v);
Barlone
Дата: 12.10.2006 14:18:28
Myster
теперь ошибка: неверный тип переменной

в процедуре XXX переменная типа SYSINT
И что процедура с этой переменной делает ?
Myster
Дата: 12.10.2006 14:47:40
Petro123
Myster
(ConnectionString передавать нельзя)

почему?

2. Чем проще тем лучше
var
  v : variant;
v := ADOConnection1.ConnectionObject;
 XXX(v);


хорошо я передаю процедуре
v : variant;
v := ADOConnection1.ConnectionObject;
XXX(v);

а что мне в процедуре с этой переменной типа variant делать? как определить коннект? (в итоге надо вызвать хранимую процедуру)
Myster
Дата: 12.10.2006 15:09:44
все разобралась :

всетаки переменная типа SYSINT в процедуре XXX

вызов:
var
p:pointer;

p:=pointer(ADOConnection1);
XXX(SYSINT(p));
Petro123
Дата: 12.10.2006 15:13:31
Myster
а что мне в процедуре с этой переменной типа variant делать? как определить коннект? (в итоге надо вызвать хранимую процедуру)

ну ты даёшь? ))))))
тогда давай так:
- забудь про COM и интерфейсы и обрисуй задачу (что пишешь сам, а где используешь чужое).
Petro123
Дата: 12.10.2006 15:15:52
т.е. так работает
Myster

var
  p:pointer;

  p:=pointer(ADOConnection1);
  XXX(SYSINT(p));


а так нет?
XXX(sysint(pointer(ADOConnection1)))
странно.
Myster
Дата: 12.10.2006 15:22:32
Petro123
Myster
а что мне в процедуре с этой переменной типа variant делать? как определить коннект? (в итоге надо вызвать хранимую процедуру)

ну ты даёшь? ))))))
тогда давай так:
- забудь про COM и интерфейсы и обрисуй задачу (что пишешь сам, а где используешь чужое).


не использую :)) может поэтому так криво и получается

но ты всетаки покажи как имея переменную типа OleVariant = ADOConnection1 создать обьект TADOConnection