![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 23.12.2009
Сообщений: 3
|
![]()
Приветствую, уважаемые форумчане!
Имеется 32-bit приложение и dll написанные на Delphi. dll выполняет функции расширения Explorer. Возникла проблема импорта этой dll в 64-bit системы. Поскольку компилятора 64-разрядного компилятора Delphi не существует, перекомпилировать исходники невозможно (использовать FreePascal (Lezaurus) тоже не удобно, имеются проблемы совместимости). Как можно решить эту проблему? Можно ли написать 64-bit dll например в VS2008, которая будет подгружать имеющуюся 32-bit делфийскую dll, или 64-bit может вызывать только себе подобных? Спасибо за ответы. Как вариант - использовать COM-объекты, есть ли у кого-нибудь опыт использования этого подхода? Может исходники какие-нибудь, примеры и т.д. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]()
Я точно не знаю, но кажись 32-х битные dll должны работать как положено. А вы вообще пробовали запустить ее так, без перекомпиляции?
Далее, какие у Вас проблемы с совместимостью в Лазарусе? Есть определенные стандарты на вызов библиотечных функций и они не зависят от Дельфи и Лазаруса. Далее, какой смысл Длл над Длл?
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика ![]() |
![]() |
![]() |
![]() |
#3 | |
Регистрация: 23.12.2009
Сообщений: 3
|
![]() Цитата:
1. Библиотека запускается, но не выполняет своих функций (должны появиться дополнительные пункты контекстного меню проводника с определенным функционалом). 2. В проекте используются сторонние компоненты, которые несовместимы с Лезарусом. 3. Смысл в том, чтобы не переписывать исходную библиотеку, а просто сделать для нее 64-х разрядную обертку. P.S. На данный момент выяснил, что нельзя вызвать из 64-разрядной 32-разрядную dll, впрочем как и наоборот. Только 32-32 64-64. Нужно искать обходной путь. |
|
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]()
Ну тогда перепишите ее на том языке, который поддерживает 64 бита
![]()
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика ![]() |
![]() |
![]() |
![]() |
#5 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
![]()
По теме. Реально ли из ехе загрузить 64х библиотеку ?(лично не пробовал пока)
|
![]() |
![]() |
![]() |
#6 |
Регистрация: 23.12.2009
Сообщений: 3
|
![]() |
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
BOBAH13, если загрузчик сработает, то в принципе можно, главное прототип верно написать
![]() Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#8 | |
Регистрация: 25.12.2009
Сообщений: 4
|
![]() Цитата:
Допустим в основном процессе есть переменная myVar по адресу, превышающему 64 разряда (пусть это будет 2^32 + 100). В библиотеке myDll32.dll есть функция Код:
Код:
Кроме того(насколько мне известно) тип Integer плавающий и зависит от разрядности. Т.е. в 32х разрядном приложении Integer 2^32, в 64х 2^64 (естественно, знаковое). 10:33 Нужно скомпилировать библиотеку под 64x. Как это делается не скажу. Сам ищу способ скомпилить C++ dll в 64x при том, что ОС и проц у меня 32x. + то же самое под Linux У нас принято пользоваться кнопочкой "Правка", дабы не плодить посты подряд, друг за другом. Модератор Последний раз редактировалось mihali4; 25.12.2009 в 13:22. |
|
![]() |
![]() |
![]() |
#9 | ||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]() Цитата:
Цитата:
в принципе можно, извратится до 64, но блин, на это столько сил уйдет(там нужны асмовые вставки еще), что проще переписпть на другой язык Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
||
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
С++: правильный импорт dll | apromix | Помощь студентам | 1 | 04.10.2009 02:28 |
Импорт DLL в прогу | cowboy | Общие вопросы Delphi | 5 | 14.04.2009 13:37 |
Vista Home Basic 64-bit | NIKITUS | Windows | 4 | 31.03.2009 18:44 |