• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Лоцман API и многопоточность под .NET.

Автор mvdtom, 20.05.14, 15:35:49

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

mvdtom

Можно ли как-нибудь обращаться к COM-объектам API Лоцмана из другого потока? И если можно, то как?

Прямое обращение к методам объектов выдает вот такое исключение.

Unable to cast COM object of type 'System.__ComObject' to interface type 'Ascon.AppPlugin.IPluginAppMain'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{E7595DD5-57E1-4F14-BDE0-2F662DDDB17A}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).

Пример кода:


private void SomeMethod()
{
var thread = new Thread(DoBacgroundWork);
thread.SetApartmentState(ApartmentState.STA);
thread.IsBackground = true;
thread.Start();
}

private void DoBacgroundWork()
{
IPluginDataSet dataSet = null;
_pluginAppMain.GetPropObjects2(0, "12345", 0, out dataSet);
}


При этом в основном потоке все отлично выполняется. Различные манипуляции с маршаллингом посредством CoGetInterfaceAndReleaseStream и CoMarshalInterThreadInterfaceInStream не привели к успеху.

Всем заранее спасибо