Конференция "Corba" » Маршаллинг потоков [Delphi, Windows]
 
  • Zmiy (17.07.06 15:17) [0]
    У меня вопрос по маршалингу потоков.
    В главном файле проекта делаю так:

    CODE>
    var
       MAPIInbox:MAPIFolder;
       OutlookApplication1:TOutlookApplication;
       NameSpace1:TNameSpace;

       OutlookPointer,NmSpacePointer:Pointer;

    ..........

     CoInitializeEx(nil,COINIT_APARTMENTTHREADED);
     OutlookApplication1.Connect;
     CoMarshalInterThreadInterfaceInStream(IDispatch, OutlookApplication1, IStream(OutlookPointer));

     NameSpace1.ConnectTo(OutlookApplication1.GetNamespace('MAPI'));
     CoMarshalInterThreadInterfaceInStream(IDispatch, NameSpace1, IStream(NmSpacePointer));
     
     MAPIInbox:=NameSpace1.GetDefaultfolder(olFolderInbox);
     CoMarshalInterThreadInterfaceInStream(IDispatch, MAPIInbox, IStream(InboxPointer));
     
     MAPIInbox.UnreadItemcount//(1)например,2 непрочтенных письма

     MyThread:=Thread.Create(true);
     MyThread.Resume;


    В методе Execute этого потока пишу:

    CoInitializeEx(nil,COINIT_APARTMENTTHREADED);

    CoGetInterfaceAndReleaseStream(Istream(InboxPointer),IDispatch, MAPIInbox);
    MAPIInbox.UnreadItemCount//(2)так вот здесь к-во непрочитаных писем равно нулю
    ...........
    Counitialize;



    И адреса у переменной MAPIInbox получаются разные в местах 1 и 2.
    Подскажите, пожалуйста, что я не так делаю..
 
Конференция "Corba" » Маршаллинг потоков [Delphi, Windows]
Есть новые Нет новых   [120345   +8][b:0][p:0.001]