2009-12-28 1 views
2

Я получил собственный COM ADOConnection, который хранится в Variant. Я хотел бы передать интерфейс этого соединения в оболочку VCL-оболочки TADOConnection. Проблема в том, что либо я получаю недопустимое сообщение компилятора typecast или нарушение доступа.Как передать вариант в TADOConnection.ConnectionObject?

Например:

procedure AssignNativeConnection(VCLConnection: TADOConnection; var NativeConnection: Variant); 
var 
    VariantManager: TVariantManager; 
    AInterface: IInterface; 
begin 
    AInterface := VCLConnection.ConnectionObject; 
    VariantManager.VarToIntf(AInterface, NativeConnection); //oops AV here! 
end; 

Любые идеи, как решить эту проблему? Я использую Delphi 2007.

Заранее спасибо.

ответ

2

Я сделал эту работу несколько раз, используя простой IUnknown бросок от варианта первого и затем как оператора, так же, как это:

VCLConnection.ConnectionObject:=(IUnknown(NativeConnection) as _Connection); 

(я замечаю свойство ConnectionObject имеет тип _Connection и что он определен в модуле ADOInt.) Конечно, вы все равно получите AV-код с недопустимым указателем или указателем nil или чем-либо, что не отвечает должным образом на основные вызовы интерфейса (QueryInterface и т. п.)

+0

Спасибо lot Stijn! Он работает отлично. Вы также можете использовать его без * как *: _Connection ((IUnknown (NativeConnection)). Тайна для меня - это то, почему VarToIntf() дает мне AV ... – Wodzu

 Смежные вопросы

  • Нет связанных вопросов^_^