Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Загрузка 32 bit DLL в 64 bit DLL - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Обработка исключительных ситуаций! http://www.cyberforum.ru/cpp-beginners/thread1078404.html
Составьте программу на языке С++. Обрабатывающую исключительную ситуацию, которая может возникнуть в ходе выполнения программы. Выведите на экран значение функции для некоторого диапазона...
C++ Нужен пример о кольцевом двухсвязном списке В етот список внести имя и фамилию студентов, а так же 15 оценек каждого из них.Ввести дание с файла. Сортировать список по уменьшению рейтинга (оценок) используя перемещенных записей. Конечный и... http://www.cyberforum.ru/cpp-beginners/thread1078403.html
C++ пролетает gets в теле switch
не хочет запрашивать ввод строки, как будто строки gets(s); нету while (v != 1 && v != 2) { cin >> v; switch(v) { case 1: { gets(s); strcat(s, ".txt");
C++ Программа для создания дипломов (диплом мастер, который позволяет печатать дипломы ВПО и СПО)
преподаватель задал написать программу с графическим интрефейсом..программа должна представлять собой программу для создания дипломов, т.е своего рода диплом мастер - позволяет печатать дипломы ВПО и...
C++ Введите целое число с клавы выведите его цифры начиная с последней http://www.cyberforum.ru/cpp-beginners/thread1078351.html
введите целое число с клавы выведите его цифры начиная с последней
C++ Написать функцию выделения произвольной строки двумерного массива в одномерный Написать функцию выделения произвольной строки двумерного массива в одномерный. Выделить две произвольные строки. подробнее

Показать сообщение отдельно
ustus_alex
6 / 6 / 1
Регистрация: 22.11.2013
Сообщений: 118
Завершенные тесты: 1
23.01.2014, 12:36  [ТС]
Цитата Сообщение от Убежденный Посмотреть сообщение
Тогда Вам нужно сделать примерно следующее - собрать 64-битную версию dll-ки с точно
таким же API, как у 32-битной, чтобы 64-битные клиенты могли ее свободно загружать и
использовать, а настоящую 32-битную версию dll-ки загрузить в свой 32-битный процесс.
А потом наладить передачу данных между 64-битной dll-кой, загруженной в клиентский
64-битный процесс, и 32-битной dll-кой, загруженный в свой 32-битный процесс.

Последовательность вызовов в этом случае будет такой: клиент (64-бит), загрузив
64-битную dll-ку, будет вызывать оттуда некоторые функции, но реально эти функции
будут всего лишь "заглушками", которые сериализуют данные и передают вызов в
32-битный процесс, в который загружена настоящая 32-битная dll. В этом процессе
вызываются настоящие функции и выполняется реальная работа, после чего параметры
сериализуются обратно, в вызывающий процесс, и в итоге клиент получает результат.
Все так, как если бы он загружал настоящую 64-битную dll, если бы она существовала.

Не факт, что это удастся так легко реализовать. Например, если какая-то функция dll
возвращает указатель, Вам нужно будет воссоздать объект, на который он указывает, в
контексте вызывающего процесса. Есть и другие потенциальные проблемы - с синхронизацией,
например, или правами доступа к объектам.
Да уж, чувствую с последним абзацем задача становится вообще практически невыполнимой...
Одна из функций в dll возвращает указатель на структуру, содержащую в себе элементы с указателями на другую структуру, а другая структура сожержит еще один указатель типа : const char * name.
Чтобы вывести значение этого указателя на константу, содержащего в себе информацию зашитую в dll о названии входов и выходов, мне потребовалось два дня эксперементов и чтения книг...
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru