Переход из Delphi на FreePascal под Windows
Модератор: Модераторы
Атнють не внезапно
Вы добавили модуль sharemem к проекту. Исходники самой библиотеки fpcmemdll.dll находятся в исходниках FPC по адресу fpcsrc\rtl\win\fpcmemdll.pp.
Mr.Smart, к сожалению, я не понял как скачать данный файл и что сним делать если его скачаю.
файл лежит в каталоге лазаруса
например у мну здесь D:/lazarus/fpc/2.2.4/source/rtl/win..
Добавлено спустя 1 минуту 5 секунд:
он хочет сказать что ее надо скомпилить
например у мну здесь D:/lazarus/fpc/2.2.4/source/rtl/win..
Добавлено спустя 1 минуту 5 секунд:
он хочет сказать что ее надо скомпилить
Спасибо за пояснения.
После компиляции в соответствующей папке win должен образоваться dll-файл? У меня не образовался.
И еще одно отличие от Delphi: закрывая старое приложение, например свою программу, и открывая новое, например fpcmemdll.pp, при нажатии Run lazarus компилирует старое приложение.
Добавлено спустя 24 минуты 14 секунд:
Поступил таким образом:
Захожу в меню New, создаю новое прилодение. Закрываю все. Открываю через Open файл fpcmemdll.pp. Компилирую. В папке win создалось несколько файлов с названием fpcmemdll и с различными разсширениями, а файл с расширением *.dll имеет название project1. Я его переименовал в fpcmemdll.dll . Запускаю свою программу - ничего не изменилось. Копирую этот файл в папку со своей программой. Запускаю - работает. Вернее сообщение об отсутствии файла fpcmemdll.dll не выдает. Считает. Закрываю exe. Выдает ошибку.
После компиляции в соответствующей папке win должен образоваться dll-файл? У меня не образовался.
И еще одно отличие от Delphi: закрывая старое приложение, например свою программу, и открывая новое, например fpcmemdll.pp, при нажатии Run lazarus компилирует старое приложение.
Добавлено спустя 24 минуты 14 секунд:
Поступил таким образом:
Захожу в меню New, создаю новое прилодение. Закрываю все. Открываю через Open файл fpcmemdll.pp. Компилирую. В папке win создалось несколько файлов с названием fpcmemdll и с различными разсширениями, а файл с расширением *.dll имеет название project1. Я его переименовал в fpcmemdll.dll . Запускаю свою программу - ничего не изменилось. Копирую этот файл в папку со своей программой. Запускаю - работает. Вернее сообщение об отсутствии файла fpcmemdll.dll не выдает. Считает. Закрываю exe. Выдает ошибку.
В первых: DLL нужно класть в %System32%.
Во вторых: компилировать так fpc fpcmemdll.pp.
И вопрос: для каких целей вам нужен модуль sharemem?
Во вторых: компилировать так fpc fpcmemdll.pp.
И вопрос: для каких целей вам нужен модуль sharemem?
Inttelc писал(а):И еще одно отличие от Delphi: закрывая старое приложение, например свою программу, и открывая новое, например fpcmemdll.pp, при нажатии Run lazarus компилирует старое приложение.
...
Захожу в меню New, создаю новое прилодение. Закрываю все. Открываю через Open файл fpcmemdll.pp.
В Lazarus, если я правильно понимаю, компилируются не файлы, а проекты. Т.е. для файла с исходным кодом должен быть соответствующий *.lpi-файл. Если вы открыли fpcmemdll.pp через Open, то проект остался прежним и компилируется именно он. Поэтому нужно открывать не сам fpcmemdll.pp, а связанный с ним проект (lpi-файл). При открытии lpr-файлов файлы проектов ищутся и открываются автоматически, по тому же имени.
Добавлено спустя 3 минуты 55 секунд:
P.S. С учётом того, что fpcmemdll.pp -- пример из комплекта FPC, можно либо компилировать его через командную строку, как предложил Mr.Smart, либо создать для него проект Lazarus самостоятельно. Т.е. создать в Lazarus через File New пустой проект библиотеки, сохранить как fpcmemdll и вставить в lpr-файл код из fpcmemdll.pp.
Odyssey писал(а):Добавлено спустя 3 минуты 55 секунд:
P.S. С учётом того, что fpcmemdll.pp -- пример из комплекта FPC, можно либо компилировать его через командную строку, как предложил Mr.Smart, либо создать для него проект Lazarus самостоятельно. Т.е. создать в Lazarus через File New пустой проект библиотеки, сохранить как fpcmemdll и вставить в lpr-файл код из fpcmemdll.pp.
В конечном итоге я так и сделал.
Помещение fpcmemdll.dll в System32, и удаление из катклога моей программы, ничего не поменяло - снова стала выходить ошибка об отсутствии файла.
Кроме того, я обнаружил, что в папке SysWOW64 файл fpcmemdll.dll уже существует! Однако проект компилируется только в том случае, когда файл fpcmemdll.dll находится в папке моего проекта
>>Однако проект компилируется только в том случае
в смысле запускается а не компилируется?
и почему System32 и SysWOW64? разве 64 битные дллки должны лежать вместе с 32 битными?
ЗЫ: вин64 в глаза не видовал
в смысле запускается а не компилируется?
и почему System32 и SysWOW64? разве 64 битные дллки должны лежать вместе с 32 битными?
ЗЫ: вин64 в глаза не видовал
и почему System32 и SysWOW64? разве 64 битные дллки должны лежать вместе с 32 битными?
ЗЫ: вин64 в глаза не видовал
в Win2000/XP 64 в каталоге %windows%\system32 - лежат 64 битные библиотеки.
а в каталоге %windows%\SysWOW64 - 32 битные !
в последующих версиях windows - наоборот (вроде).
>>в Win2000/XP 64 в каталоге %windows%\system32 - лежат 64 битные библиотеки.
гдето я читал, что содержимое system32 зависит от приложения которым открывается папка, если туда копировать 64разрядную дллку 32 разрядным фаром - она попадет к 32разрядным дллкам. дело было давно, возможно вру
гдето я читал, что содержимое system32 зависит от приложения которым открывается папка, если туда копировать 64разрядную дллку 32 разрядным фаром - она попадет к 32разрядным дллкам. дело было давно, возможно вру
Разобрался со всеми проблемами. Программа уже почти месяц как работала нормально. Сегодня запускаю, выдает глюк: "Project ...raised exception class 'External:SIGSEGV'". Подскажите пожалуйста, что это за ошибка.
"Project ...raised exception class 'External:SIGSEGV'" - это может быть всё что угодно. Бери дебаггер и вперёд. только так.
А есть какие-то общие принципы перехода из Delphi на FreePascal под Windows?
На что стоит обратить внимание?
На что стоит обратить внимание?
http://www.hu.freepascal.org/lazarus/
0.9.29 Вполне работоспособна вот вот выйдет 0,9,30. Но хочу обратить внимание, что компилятор ест много памяти, нужно, по опыту, метров 600 минимум, иначе могут быть странные сбои.
Добавлено спустя 4 минуты 44 секунды:
Не пытайтесь конвертировать проект Делфи в проект Lazarus с помощью утилит, лучше создать новый проект в Lazarus и перенести по кускам код из проекта Делфи методом копипаста.
По возможности не применять функции api windows, пробовать обойтись объектами freepascal
0.9.29 Вполне работоспособна вот вот выйдет 0,9,30. Но хочу обратить внимание, что компилятор ест много памяти, нужно, по опыту, метров 600 минимум, иначе могут быть странные сбои.
Добавлено спустя 4 минуты 44 секунды:
А есть какие-то общие принципы перехода из Delphi на FreePascal под Windows?
На что стоит обратить внимание?
Не пытайтесь конвертировать проект Делфи в проект Lazarus с помощью утилит, лучше создать новый проект в Lazarus и перенести по кускам код из проекта Делфи методом копипаста.
По возможности не применять функции api windows, пробовать обойтись объектами freepascal
Ism писал(а):Не пытайтесь конвертировать проект Делфи в проект Lazarus с помощью утилит, лучше создать новый проект в Lazarus и перенести по кускам код из проекта Делфи методом копипаста.
Почему? По мне гораздо проще конвертировать проект и потом исправить несколько строк при необходимости, чем копипастить, в особенности если проект достаточно крупный.
