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