[Решено] Передача в dll типа string

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
NTFS
постоялец
Сообщения: 388
Зарегистрирован: 05.11.2007 13:57:50
Откуда: Краснодар
Контактная информация:

[Решено] Передача в dll типа string

Сообщение NTFS »

День добрый.

Не могу вернуть из dll строку string.

Обращение к такой функции не работает (пример упрощен):

procedure myproc(var s:string) ; stdcall ; export ;
begin
s:='abc' ;
end ;

неизбежно приводит к Access Violation

если убираю var, то все ок, но строка не возращается, как и ожидалось.

При использовании PChar все нормально.

fpc 2.4.2, Win32

И библиотека, и главная программа на fpc.
Аватара пользователя
Максим
энтузиаст
Сообщения: 599
Зарегистрирован: 27.07.2007 01:51:43
Откуда: Москва

Сообщение Максим »

Это нормально. Пользуйтесь PChar.
NTFS
постоялец
Сообщения: 388
Зарегистрирован: 05.11.2007 13:57:50
Откуда: Краснодар
Контактная информация:

Сообщение NTFS »

Это НЕнормально. Компилятор ведь один и то же, значит, должен передавать ЛЮБЫЕ типы в библиотеку и обратно. Ладно, в древних версиях Delphi была эта проблема, но уж FPC должен ее побороть?
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

NTFS Компилятор то один, а менеджеры памяти разные...
NTFS
постоялец
Сообщения: 388
Зарегистрирован: 05.11.2007 13:57:50
Откуда: Краснодар
Контактная информация:

Сообщение NTFS »

Решение? Не хочется использовать PChar.
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Аватара пользователя
Максим
энтузиаст
Сообщения: 599
Зарегистрирован: 27.07.2007 01:51:43
Откуда: Москва

Сообщение Максим »

NTFS
Эта тема здесь, на форуме, обсуждалась миллион раз. Нельзя же быть таким ленивым. :evil:
search.php?keywords=string+%D0%B2+DLL
NTFS
постоялец
Сообщения: 388
Зарегистрирован: 05.11.2007 13:57:50
Откуда: Краснодар
Контактная информация:

Сообщение NTFS »

Блин, я думал, что языки высокого уровня (и их компиляторы) эту проблему решили лет так 10 назад :-)

Спасибо за помощь.
Maxizar
постоялец
Сообщения: 385
Зарегистрирован: 20.03.2010 18:48:14

Сообщение Maxizar »

можно просто вписать модуль cmem (для совсем ленивых) :)
http://wiki.freepascal.org/Lazarus/FPC_Libraries/ru

Пример
Ответить