Взаимодействие VB с 32 и 64 битной DLL

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Взаимодействие VB с 32 и 64 битной DLL

Сообщение jangle » 16.10.2015 (Пт) 13:35

Задача управлять устройством подключенным к USB-порту. Драйвера устройства могут быть 32 и 64 битными, заранее не известно какие стоят.
Управляется железка через DLL-обертку над драйвером, все API функции устройства в 32 и 64 битной версии идентичны, только разрядность DLL-обертки отличается. Протокол взаимодействия текстовый и DLL-обертка драйвера вызывает функции приложения через адреса переданные в нее. С 32-битной версией DLL проблем нет. Но как заставить работать VB код с 64 битной DLL?

Пока придумал написать на C++ 64-битное приложение, VB код запускает его в фоновом режиме и устанавливает соединение с ним через пайп. Есть некий текстовый протокол, который описывает взаимодействие VB и C++ кода, все CallBack функции которые вызывает DLL-обертка в этом же С++ фоновом приложении. По пайпу гоняются только текстовые строки. Но как-то все неуклюже выходит. Может есть более простой путь?

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Взаимодействие VB с 32 и 64 битной DLL

Сообщение Mikle » 16.10.2015 (Пт) 13:55

jangle писал(а):Может есть более простой путь?

vb.net

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Взаимодействие VB с 32 и 64 битной DLL

Сообщение jangle » 16.10.2015 (Пт) 13:57

Mikle писал(а):
jangle писал(а):Может есть более простой путь?

vb.net


.Net исключен. В своих проектах использую только нативный код. Да и все равно в этом случае нужно 2 версии основной программы.
32 и 64 бита. А это не очень удобно. Хотелось бы один 32 битный проект который может управлять 32 и 64 DLL

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Взаимодействие VB с 32 и 64 битной DLL

Сообщение Хакер » 16.10.2015 (Пт) 15:32

jangle писал(а):Может есть более простой путь?

Ну, в отличие от thunking-а между 16-битным и 32-битным кодом, аналогичное для взаимодействия 32→64 не сделали (и вот почему).

Так что остаётся делать свой 64-битный хост-процесс для 64-битной DLL.

Но остаётся по прежнему выбор того, как это можно сделать. Ведь можно написать ActiveX EXE или даже ActiveX DLL (с флагом out-of-process). Тогда управление девайсом со стороны VB-кода будет выглядеть как обычные ООП-вызовы (и такой код будет легче поддерживать), не надо писать собственный механизм междупроцессного взаимодействия — будут использованы системные механизмы.

В случае с Active DLL даже в качестве хост-процесса будет системный процесс. Остаётся только написать этот ActiveX-сервер.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Взаимодействие VB с 32 и 64 битной DLL

Сообщение The trick » 16.10.2015 (Пт) 16:08

Можно попробовать переключиться в 64 битный режим, загрузить dll и потом уже работать с ней также как делает wow64. Я делал как-то такое взаимодействие, но dll не пробовал загружать, работал только с ntdll.
UA6527P

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Взаимодействие VB с 32 и 64 битной DLL

Сообщение jangle » 17.10.2015 (Сб) 13:46

Хакер писал(а):
jangle писал(а): даже ActiveX DLL (с флагом out-of-process). Т .


Интересная идея. В VS2010-13 есть какой-нибудь шаблон или пример создания такой ActiveX DLL на C++ ?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Взаимодействие VB с 32 и 64 битной DLL

Сообщение Хакер » 17.10.2015 (Сб) 14:05

jangle писал(а):В VS2010-13 есть какой-нибудь шаблон или пример создания такой ActiveX DLL на C++ ?

Понятия не имею, я никогда не ставил даже этих студий.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 77

    TopList