Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Managed Plugin Unmanaged App, Как лучше организовать взаимодействие. 
:(
    Опции темы
Alexeis
Дата 27.11.2015, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: нет
Всего: 459



Задача такая, нужно чтобы Managed Plugin на C# реализовал COM интерфейс, а нативный код, мог использовать этот интерфейс для вызова managed кода.
Имеем интерфейс подобного рода
Код

[Guid("{8641D067-2053-4960-9920-A5E47DB938E6}"),
    InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface ICommandInterpretator
{
    [return : MarshalAs(UnmanagedType.LPWStr)]
    string   GetLastError  ( );
    .....

который должен быть реализован внутри плагина, т.е. managed кода. Насколько я понимаю, такой маршалинг не сработает, поскольку возвращаемая строка должна жить после окончания вызова, т.е. компилятор C# не может вставить код для удаления памятью Unmanaged строки, поскольку он не знает время ее жизни.

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

В нескольких местах нашел рекомендации использовать С++/CLI Wraper.
Например тыц    Т.е. все интерфейсы реализовывать на С++/CLI, а логику уже на С# . Но этот подход не очень удобен ввиду того, довольно много кода и логики придется писать на С++/CLI . 


Это сообщение отредактировал(а) Alexeis - 27.11.2015, 12:24


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
chupachups
Дата 28.11.2015, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 0
Регистрация: 15.10.2008

Репутация: нет
Всего: 1



Не уверен на все 100, но по-моему строка будет жить все время пока жив сам СОМ-объект и умрет вместе с ним. Во всяком случае, когда мои коллеги писали СОМ-объект на С# для его использования из 1С - никто не парился на сей счет.

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
Alexeis
Дата 30.11.2015, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: нет
Всего: 459



Цитата(chupachups @  28.11.2015,  14:22 Найти цитируемый пост)
 но по-моему строка будет жить все время пока жив сам СОМ-объект и умрет вместе с ним.

  Строка - string может и будет, меня интересует что со временем жизни ее  Unmanaged копии. Но вообще, вы наверное правы, скорее всего компилятор C# на этот счет выдаст ошибку если что не так. Если придумали маршалинг по возвращаемому значению, то наверняка знали об этой проблеме. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1190 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.