|
Модераторы: Partizan, gambit |
|
Alexeis |
|
|||
Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: нет Всего: 459 |
Задача такая, нужно чтобы Managed Plugin на C# реализовал COM интерфейс, а нативный код, мог использовать этот интерфейс для вызова managed кода.
Имеем интерфейс подобного рода
который должен быть реализован внутри плагина, т.е. managed кода. Насколько я понимаю, такой маршалинг не сработает, поскольку возвращаемая строка должна жить после окончания вызова, т.е. компилятор C# не может вставить код для удаления памятью Unmanaged строки, поскольку он не знает время ее жизни. Указанный выше интерфейс утвержден и опубликован, менять его нет возможности. В нескольких местах нашел рекомендации использовать С++/CLI Wraper. Например тыц Т.е. все интерфейсы реализовывать на С++/CLI, а логику уже на С# . Но этот подход не очень удобен ввиду того, довольно много кода и логики придется писать на С++/CLI . Это сообщение отредактировал(а) Alexeis - 27.11.2015, 12:24 -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
chupachups |
|
|||
Новичок Профиль Группа: Участник Сообщений: 0 Регистрация: 15.10.2008 Репутация: нет Всего: 1 |
Не уверен на все 100, но по-моему строка будет жить все время пока жив сам СОМ-объект и умрет вместе с ним. Во всяком случае, когда мои коллеги писали СОМ-объект на С# для его использования из 1С - никто не парился на сей счет.
Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
Alexeis |
|
|||
Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: нет Всего: 459 |
Строка - string может и будет, меня интересует что со временем жизни ее Unmanaged копии. Но вообще, вы наверное правы, скорее всего компилятор C# на этот счет выдаст ошибку если что не так. Если придумали маршалинг по возвращаемому значению, то наверняка знали об этой проблеме. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | .NET для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |