Конференция "Corba" » Получить данные из .NET [Delphi, Windows]
 
  • Serge (10.12.09 20:00) [0]
    Сделал визуальную ActiveX форму (TActiveForm). Заказчик попросил предоставить еще и программный интерфейс к компоненте (ocx), а именно загрузка данных из потоков типа LoadFromStream(IStream), так как они хотят использовать ее на .NET формах, и хотят программировать ее.

    Попробовал добавлять методы к интерфейсу с параметрами IStream (который берется из ActiveX.IStream). В .NET форме метод выглядит как LoadFromStream(Myactivexcomp.IStream), естественно не работает.

    Пробовал по другому, - импортировал mscoree.tlb, там есть вроде как .net'овский IStream, добавил новый интерфейс к компоненте с нужными методами, но, как теперь загрузить данные из mscoree_TLB.IStream в TOleStream.Create(****)? опять не соответствие типов:
    mscoree_TLB.IStream и ActiveX.IStream.

    Решил написать обертку, (как на примере TOleStream), которая будет кушать нужный мне mscoree_TLB.IStream и застрял на вызове IStream.Read.


    function TNewOleStream.Read(var Buffer; Count: Integer): Longint;
    var pcbRead : LongWord;
    begin
     // FStream Это IStream из mscoree.tlb где
     // метод Read определен так:
     // IStream.Read(out pv: Pointer; cb: LongWord; out pcbRead: LongWord): HResult; stdcall;
     // нужно вызвать его, имея параметры этой функции
     FStream.Read(Buffer, count, pcbRead);
     Result := pcbRead;
     // получаем [Error] NewOleStream.pas(48): Types of actual and formal var parameters must be identical  
    end;



    Объясните пожалуйста, почему ругается компилятор?
    И есть ли вообще другие варианты передачи данных из .NET в COM?
  • Romkin © (15.12.09 14:22) [1]
    Просто реализуй IStream. Объявляй в библиотеке типов его как IUnknown, внутри делай QueryInterface.
 
Конференция "Corba" » Получить данные из .NET [Delphi, Windows]
Есть новые Нет новых   [134427   +35][b:0][p:0.001]