Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


Информационный Канал Subscribe.Ru


RusFAQ.ru: Программирование на Delphi

Выпуск № 027
от 30.06.2002, 14:00

Администратор:
Имя: Калашников О.А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 56
Отправлено ответов: 59
Активность: 105.3 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе]


 Список экспертов, ответы которых опубликованы в данном выпуске

Артём Шегеда
Статус: Профессиональный
Общий рейтинг: 124.97
URL: Пристанище неодинокого программиста
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 52. Привет всем экспертам! У меня возникла такая проблема: есть ф-ция Delete(src:string,ofs:integer,cnt:... (ответов: 1)

Вопросов: 1, ответов: 1


 Вопрос № 52

Привет всем экспертам!
У меня возникла такая проблема:
есть ф-ция Delete(src:string,ofs:integer,cnt:integer);
удаляющая символы во входящей строке(src) начиная со смещения ofs, где cnt-сколько символов надо удалить.
Так вот, в exe-шнике все работает на ура, но когда эту ф-цию
использовать в DLL-ке (причем компилируется нормально),
при вызове импортированой ф-ции в которую входит Delete(), вылезает MB со словами: "Invalid pointer operation", но символы удаляются.
Подскажите плз, где баг?
ЗЫ: Потом после Delete() писал свою аналогичную ф-цию, - Та же фигня..



Вопрос отправлен: 27.06.2002, 02:35
Отправитель: Andrew

[Следующий вопрос >>] [Список вопросов]

Отвечает Артём Шегеда

Добрый день, Andrew!
А ты читал примечание, которое Borland пишет в начале каждой создаваемой DLL? Вот оно дословно:

Important note about DLL memory management: ShareMem must be the first unit in your library's USES clause AND your project's (select Project-View Source) USES clause if your DLL exports any procedures or functions that pass strings as parameters or function results. This applies to all strings passed to and from your DLL--even those that are nested in records and classes. ShareMem is the interface unit to the BORLNDMM.DLL shared memory manager, which must be deployed along with your DLL. To avoid using BORLNDMM.DLL, pass string information using PChar or ShortString parameters.

Это означает, что для корректной передачи строк в качестве параметров в/из функций DLL нужно подключить в первую очередь модуль ShareMem. Если этого не делать, то возможна передача только типов PChar (т.е. только "чистый" указатель) либо ShortString (стандартный тип Pascal, макс. длина - 255 символов).
По крайней мере, у меня всё это работает...

Ответ отправлен: 27.06.2002, 12:10
Отправитель: Артём Шегеда



Форма отправки вопроса

Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook" и "Microsoft Outlook Express". В программе The Bat! подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте, что в некоторых браузерах могут стоять запреты на открытие других окон, а также "чрезмерное" кэширование данных, при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

© 2002 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (48)
C / C++ (30)
Perl (8)
Delphi (15)
Pascal (26)
Basic / VBA (12)
Java / JavaScript (6)
PHP (7)
MySQL / MSSQL (8)
Пользователю
Windows 95/98/Me (46)
Windows NT/2000/XP (35)
"Железо" (42)
Поиск информации (21)
Администратору
Windows NT/2000/XP (17)
Linux / Unix (12)
Юристу
Гражданское право (9)
Семейное право (4)
Трудовое право (6)
КоАП (3)

Отправить вопрос всем экспертам выбранной рассылки.




be number one Яндекс цитирования

© 2002 Россия, Москва. Авторское право: RusFAQ.ru

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное