|
6 / 6 / 1
Регистрация: 22.11.2013
Сообщений: 123
|
|
Загрузка 32 bit DLL в 64 bit DLL22.01.2014, 13:23. Показов 21500. Ответов 12
Метки нет (Все метки)
Доброго дня,
в своем предыдущем посту я озадачивался вопросом о том, как можно прикрутить DLL файл в проект visual studio, для доступа к функциям библиотеки. Получил очень хороший ответ, разобрался в нем и реализовал небольшое консольное приложение для тестирование функциональности DLL. Как же в последствии выяснилось, библиотека существует только в 32 разрядном виде и возможностей генерирования у разработчиков этой библиотеки, ее в 64 bit не существует в принципе. По моему заданию мне нужно разработать 64 bit DLL (своего рода компонентный блок типа блока из simulink), в котором будут реализована вся функциональность 32 битной предоставленной мне библиотеки. То есть как ни крути, а грузить ее в 64 битный процес надо... Несколько дней курил мануалы на просторах msdn, stackoverflow и других ресурсов, но так и не нашел реализованного решения, в виде небольшого примера как это делается. Так как в большинстве статей, говориться о том, что это сделать невозможно, задача интеграции разных процессов очень нетривиальна. Именно поэтой причине и вынес данный вопрос в отдельную тему, надеясь, что она будет интересной и остальным участникам. Может кто-нибудь из форумчан сталкивался с подобной задачей и имеет некоторые наработки в ней? Мне как новичку в c++ довольно сложно разобраться со статьей: http://blog.mattmags.com/2007/... -bit-code/ чтобы тотчас же применить на практике теоретический рецепт.
0
|
|
| 22.01.2014, 13:23 | |
|
Ответы с готовыми решениями:
12
Java.lang.UnsatisfiedLinkError: xxxx.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform Регистрация DLL через regsrv32 в 64 bit NAudio.dll не работает в Wi7 и Win8.1 64 bit |
|
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
|
|
| 22.01.2014, 14:56 | |
|
Не проще будет написать приложение-обёртку и общаться с ним по любому удобному IPC?
Добавлено через 49 секунд Проглядел по диагонали статью по ссылке, там как раз об этом и говорят.
0
|
|
|
6 / 6 / 1
Регистрация: 22.11.2013
Сообщений: 123
|
||
| 22.01.2014, 15:12 [ТС] | ||
|
И, как следствие, обратился к более опытному сообществу...
0
|
||
|
Ушел с форума
|
|||
| 22.01.2014, 17:25 | |||
|
Для ее клиентов это будет наилучшим вариантом, чем всякие грабли в виде суррогатных процессов, IPC и прочего.
1
|
|||
|
6 / 6 / 1
Регистрация: 22.11.2013
Сообщений: 123
|
||
| 22.01.2014, 19:33 [ТС] | ||
|
Отсюда и мучения с поисками примеров создания суррогатных процессов. Без них мне никак не обойтись..
0
|
||
|
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
|
||
| 22.01.2014, 20:04 | ||
|
Между тем, что мешает собирать основную софтину только под 32 бита? Пользователям проприетарщины не привыкать.
0
|
||
|
6 / 6 / 1
Регистрация: 22.11.2013
Сообщений: 123
|
||
| 22.01.2014, 20:30 [ТС] | ||
|
И, до прошлой недели, не было вообще никакого опыта с работой с dll файлами. Но, как говорится опыт дело наживное... ![]() особенно в условиях поставленной задачи.Основную софтину 32 битную не взять, доступна только 64 битная... Конечными же пользователями является только мой отдел. Отсюда и столько никому не нужных заморочек. Ну, а чтобы было понятнее, что за задача стоит.. Есть программа похожая отдаленно на симулинк, каждой компонент который называется фильтром(dll файл). мне нужно из ранее написанного фильтра (64 bit ) получить в мой фильтр (64 bit ) поток данных с CAN шины, в потоке выделить нужный сигнал и произвести с ним цифровую обработку на основе предоставленной мне ранее dll (32 bit) , результат анализа передать в следующий за моим фильтром фильтр (64bit) .
0
|
||
|
Ушел с форума
|
||
| 22.01.2014, 22:39 | ||
|
таким же API, как у 32-битной, чтобы 64-битные клиенты могли ее свободно загружать и использовать, а настоящую 32-битную версию dll-ки загрузить в свой 32-битный процесс. А потом наладить передачу данных между 64-битной dll-кой, загруженной в клиентский 64-битный процесс, и 32-битной dll-кой, загруженный в свой 32-битный процесс. Последовательность вызовов в этом случае будет такой: клиент (64-бит), загрузив 64-битную dll-ку, будет вызывать оттуда некоторые функции, но реально эти функции будут всего лишь "заглушками", которые сериализуют данные и передают вызов в 32-битный процесс, в который загружена настоящая 32-битная dll. В этом процессе вызываются настоящие функции и выполняется реальная работа, после чего параметры сериализуются обратно, в вызывающий процесс, и в итоге клиент получает результат. Все так, как если бы он загружал настоящую 64-битную dll, если бы она существовала. Не факт, что это удастся так легко реализовать. Например, если какая-то функция dll возвращает указатель, Вам нужно будет воссоздать объект, на который он указывает, в контексте вызывающего процесса. Есть и другие потенциальные проблемы - с синхронизацией, например, или правами доступа к объектам.
1
|
||
|
6 / 6 / 1
Регистрация: 22.11.2013
Сообщений: 123
|
||
| 23.01.2014, 12:36 [ТС] | ||
|
Одна из функций в dll возвращает указатель на структуру, содержащую в себе элементы с указателями на другую структуру, а другая структура сожержит еще один указатель типа : const char * name. Чтобы вывести значение этого указателя на константу, содержащего в себе информацию зашитую в dll о названии входов и выходов, мне потребовалось два дня эксперементов и чтения книг...
0
|
||
|
Ушел с форума
|
||
| 23.01.2014, 12:42 | ||
|
через границы процессов любой разрядности, причем сами процессы могут быть запущены на разных машинах... Но для этого Ваша dll-ка сама должна быть COM-объектом, использовать только COM-совместимые типы и иметь библиотеку типов (tlb), иначе ничего не выйдет.
1
|
||
| 03.11.2022, 00:59 | |
|
0
|
|
| 03.11.2022, 00:59 | |
|
Помогаю со студенческими работами здесь
13
Обясните мне, если Windows 32 bit, процессор 64 bit, то работает ли 2-ое ядро? Разбиение на треугольники: разное поведение WinXP 32 bit и Win 7 64 bit HP ProBook 6570b (под 64-bit) встанет ли на него Win 32-bit? Ноут Aspire 5560G: не ставится Windows 7 64-bit, в отличие от 32-bit Как узнать какая у меня винда (Windows XP SP3 2008): 32 bit или 64 bit? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|