![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| qpeHukc |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 18.12.2005 Где: Москва Репутация: нет Всего: нет |
есть код на C++, достающий функции из dll - ки. Суть функций - работа с платой АЦП. Нужно переписать этот код на C#
не могу найти соотв. конструкций и типов Это сообщение отредактировал(а) qpeHukc - 27.1.2006, 02:14 |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
их и не будет. В дотнете работать с COM на порядок проще: 1) создаём например Console Application 2) заходим в "Add Reference..." 3) переходим на закладку COM, находим там нашу dll'ку (или если там нету, то идём в "Browse" и находим её там) 4) жмём OK - в проект добавляется набор классов-wrapper'ов для нашей dll, работаем с ними как с обычными классами Если нужна помощь - скидывай в аттаче свою длл-ку в зипе, я напишу пример приложения. -------------------- ![]() |
|||
|
||||
| Cr@$h |
|
|||
![]() Исследователь ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1693 Регистрация: 3.4.2005 Где: Санкт-Петербург, Россия Репутация: 1 Всего: 41 |
Т.е. классы импорта создаются автоматически? Как тогда визард узнает, какие правила по вызовам использовались в dll?
|
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Да, автоматически. Как узнает - это дело визарда -------------------- ![]() |
|||
|
||||
| qpeHukc |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 18.12.2005 Где: Москва Репутация: нет Всего: нет |
к сожалению в dll - ке не COM. Выводится сообщение : A reference to '...путь\lcomp.dll' could not be added. Please make sure that the file is accessible, and that it is a valid assembly or COM component. |
|||
|
||||
| qpeHukc |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 18.12.2005 Где: Москва Репутация: нет Всего: нет |
Может это поможет лучше понять, что происходит в dll-ке. Вот как происходит работа с функциями длл-ки :
функция CallCreateInstance :
Это сообщение отредактировал(а) qpeHukc - 27.1.2006, 21:18 |
||||
|
|||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
Библиотека совместима с OLE Automation? Если нет, на помощь врапперов не рассчитывай.
|
|||
|
||||
| qpeHukc |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 18.12.2005 Где: Москва Репутация: нет Всего: нет |
есть пример работы с этой библиотекой на Delphi. значит совместима, так ведь ? |
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
Не факт. Кинь dll, посмотрим.
|
|||
|
||||
| qpeHukc |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 18.12.2005 Где: Москва Репутация: нет Всего: нет |
||||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Враппер создать не получилось. Похоже на простейший COM-компонент. Всё что можно сделать, имхо, это скопировать все структуры и интерфейсы в код на C#, а все импортируемые ф-ции вынести с атрибутами [DllImport] в отдельный класс.
-------------------- ![]() |
|||
|
||||
| qpeHukc |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 18.12.2005 Где: Москва Репутация: нет Всего: нет |
ясно а как выносить типы ? например ULONG в C# это ulong, а что делать с void** ppv const IID& iid PUCHAR HRESULT PUSHORT Data ( может это равно ref ushort ?) char *FileName |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
IID - это Guid
PUCHAR , char* - это byte* HRESULT - HandleRef PUSHORT - ushort* С указателями в C# можно работать, если поставить у метода модификатор unsafe и выставить у проекта "Allow unsafe code". Вообще, строки при вызове функций из длл автоматически переводятся из char* в string и обратно. -------------------- ![]() |
|||
|
||||
| qpeHukc |
|
||||||
![]() Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 18.12.2005 Где: Москва Репутация: нет Всего: нет |
не выходит с переделками типов.
было :
сделал :
вызвал :
пишет MarshalDirectiveException was unhandled HandleRefs cannot be marshaled ByRef or from unmanaged to managed. в чем ссуть ? |
||||||
|
|||||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Пардон, я спутал - HandleRef нужен только для передачи и возврата виндошных дескрипторов aka хэндлов.
HRESULT хоть и начинается с H, но не хэндл Обыкновенный Int32 -------------------- ![]() |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [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. |