Страница 1 из 1

Передача строки из Mapbasic в DLL (Delphi)

Добавлено: 25 янв 2021, 07:22
spawner
Подскажите, пытаюсь передать строку из Mapbasic'a в процедуру из Dll:

Dll на Delphi:
procedure zzz(s:String);stdcall;
begin
showmessage(s);
end;

Код Mapbasic:
Declare Sub zzz Lib "MyDll.dll" (s as String)

dim s as string
s="abcdef"
call zzz(s)

В итоге в Dll передается какая-то фигня (случайный набор кракозябр, каждый раз разный, или вообще вылетает Dll-ка). Пробовал в Dll вместо String писать PChar, WideChar, AnsiChar - один фиг не получается.
Подскажите куда копать.

Re: Передача строки из Mapbasic в DLL (Delphi)

Добавлено: 25 янв 2021, 08:42
gamm
string на delphi - это весьма специфическая конструкция. Насколько я помню (уж очень давно это было), из Мапвасика передается адрес символьной строки, и встречать его нужно соответственно. См тут, например

Re: Передача строки из Mapbasic в DLL (Delphi)

Добавлено: 25 фев 2021, 09:26
Cancer
Попробуйте так:

Dll на Delphi:
procedure zzz(s:LPCSTR);stdcall;
begin
showmessage(s);
end;

Код Mapbasic:
Declare Sub zzz Lib "MyDll.dll" (s as String * 255)

Re: Передача строки из Mapbasic в DLL (Delphi)

Добавлено: 25 мар 2021, 14:59
spawner
В общем я затупил, сделал локальную переменную в мапбэйсике, и в момент вызова процедуры в dll она уже была уничтожена :) заменил на глобальную и все заработало.