![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Гость_Игорь |
|
||||
|
Unregistered |
Привет всем!
Ситуация такая: из основной программы вызываю функцию в DLL, которая выделяет память для записи и заполняет ее поля - получаю эксепшн типа "Access violated" Код в DLL типа такого:
в процедуре код такой:
В чем проблема ? Заранее спасибо. |
||||
|
|||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
-------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| Гость_Игорь |
|
|||
|
Unregistered |
Спасибо.
Попробую. А не могли бы Вы объяснить причину эксепшна и почему надо использовать ShareMem ? Просто не хочу тупо код использовать, а знать что делаю. |
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
когда создаешь ДЛЛ в Дельфи, то там есть такой текст:
-------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
Хотя ты не указал, что у тебя возвращает функция в ДЛЛ(или какие параметры принимает) - дело в разных менеджерах памяти.
-------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| Unregistered |
|
|||
|
Unregistered |
Я не до конца расписал код.
Вообще то вот так:
Надеюсь это будет работать (просто не могу щас это проверить) Т.е., если я правильно понял, то 1. Если я использую строки, то надо включать ShareMem. Но тогда с моим приложением придется таскать BORLNDMM.DLL 2. Чтоб не таскать за собой BORLNDMM.DLL надо просто использовать PChar Типа p^.name:= PChar('Hello World!'); да ? |
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
ShareMem необходимо включать, если ты передаешь строки из ДЛЛ в свою программу. Если не хочется использовать ShareMem, то используй указатели на строки типа PAnsiChar или PWideChar.
-------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |