![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Mag |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 23.6.2005 Репутация: нет Всего: нет |
На форуме много было тем про перевод программного кода с С++ в С#, прошелся по всем результатам поиска, моей проблемки не нашел.
Есть несколько функций, которые взяты с C++ и добавлены в код на С#:
&varSubType &(iss.item.iImage) Как перевести эти параметры в C#? А также:
При добавлении в С# Студия сообщает пишит такой эрор
--------------------
В каждой черной комнате есть выход - всегда есть выход с любой ситуации! |
||||||
|
|||||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
CComPtr не получится, ИМХО. Хотя может и можно как-то обернуть в p/invoke, не пробовал.
Адреса передаются через IntPtr. Примеры взаимодействия неуправляемого кода (на С++ и т.п.) с управляемым можно посмотреть на www.pinvoke.net -------------------- ![]() |
|||
|
||||
| Mag |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 23.6.2005 Репутация: нет Всего: нет |
CComPtr, может хоть как-то можна применить его? Если получилось, снимается сразу большая проблема.
Если под С# использователь нельзя, может свой класс написать, аналог этому? Это сообщение отредактировал(а) Mag - 19.7.2007, 17:25 --------------------
В каждой черной комнате есть выход - всегда есть выход с любой ситуации! |
|||
|
||||
| Mag |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 23.6.2005 Репутация: нет Всего: нет |
Уточняю: CComPtr нужет был для работы с IUnknown. Вызывать AddRef и Release в моей программе. я так понимаю IUnknown в шарпе не применяется, если ошибаюсь, поправте меня. Значит этот интрефейс нужно реализовать в проекте. Подскажите как начинать писать?
--------------------
В каждой черной комнате есть выход - всегда есть выход с любой ситуации! |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Можно попробовать следующее:
- объявить какую-нибудь функцию в С++ как dllexport - в C# коде проимпортировать её из С++ DLL через [DllImport] - вызывая эту функцию, передать из С++ в C# интерфейс как указатель в С++ и IntPtr в C# - потом привести к object через Marshal.GetObjectForIUnknown далее по обстоятельствам. К примеру, тот же Marshal поюзать для AddRef/Release. Добавлено через 2 минуты и 30 секунд P.S. вообще, если есть комовская DLL, почему бы просто не добавить её через Add reference... -------------------- ![]() |
|||
|
||||
| Mag |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 23.6.2005 Репутация: нет Всего: нет |
Есть длл, добавил.
Как с этим параметром быть? Реализовать бы правильно этот параметр и будет работать. --------------------
В каждой черной комнате есть выход - всегда есть выход с любой ситуации! |
||||
|
|||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
IMAMNode - это что ? Класс, автосгенерированный при добавлении комовской длл в reference ? Если да, метод GetChildByID принадлежит классу и типы аргументов известны, зачем гадать что передавать во 2-м параметре ? IntelliSence показывает типы аргументов методов при наборе кода, смотрим туда. Если там object, передавайте ptChildNode. Если ref object, передавайте ref ptChildNode. Аналогично если out object.
-------------------- ![]() |
|||
|
||||
| Mag |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 23.6.2005 Репутация: нет Всего: нет |
Да сработало, IntelliSence показала второй параметр - ptChildNode, подставил. Во время дебага возникают эрроры: 1. Error 3 The type or namespace name 'PreserveSig' could not be found (are you missing a using directive or an assembly reference?) 2. Error 5 The type or namespace name 'ComVisible' could not be found (are you missing a using directive or an assembly reference?) Так как мне нужны методы Addref() and Release(), прописал в ручную интерфейс :
Не может найти : TVINSERTSTRUCT iss; public uint TreeBuild(IMAMNode ptNode, HTREEITEM Root, int Lvl) Error 1 The type or namespace name 'TVINSERTSTRUCT' could not be found (are you missing a using directive or an assembly reference?) Error 2 The type or namespace name 'HTREEITEM' could not be found (are you missing a using directive or an assembly reference?) --------------------
В каждой черной комнате есть выход - всегда есть выход с любой ситуации! |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |