![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Competitor |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 23.3.2005 Где: Tula Репутация: нет Всего: -1 |
Привет всем.
Сделал dll'ку на С++, которая работает с WMI и выдает на выход какую-то строку типа BSTR. Я импортирую эту дллку с свой основной проект на C#. Как мне передать значение из С++ дллки в C#, чтобы там оно нормально прочиталось. Допустим метод в С++ на экспорт выглядит так:
А в C# метод импорта выглядит так:
При таком написании вываливается ошибка записи в память. Подскажите плиз как решить эту проблему? |
||||
|
|||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
решение проблемы заключается в использовании интерфейса dll только встроенных типов.
импорт такой функции возможен только в приложении, скомпиллированным темже компиллятором что и библиотека, причем тойже версии и с теми же настройками, иначе ничего не гарантируется. Потому, что возвращается объект. Для передачи строк используй char*. |
|||
|
||||
| Competitor |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 23.3.2005 Где: Tula Репутация: нет Всего: -1 |
Fazil6, спасибо за подсказку.
А как тогда сконвертить BSTR в char*. |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
думаю, что тебе надо не конвертация, тут надо думать о выделении и заполнении буфера. Как вариант
вообще конкретное решение может быть и иным и это зависит от конкретики решаемой задачи |
|||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Это вопрос не из общих, а из MC++.
http://msdn.microsoft.com/msdnmag/issues/02/08/CQA/ Зачти, глянь какой тип идет по умельчанию для string. Преобразуй к нему. Или попробуй отмаршализовать BSTR (которая организуется типо (не путать с "типа") указатель на буфер, где сначала длина строки, а затем уже байты текстовухи). -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |