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

MapInfo, MapBasic
Ответить
spawner
Активный участник
Сообщения: 103
Зарегистрирован: 09 окт 2009, 16:49
Репутация: 10

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

Сообщение spawner » 25 янв 2021, 07:22

Подскажите, пытаюсь передать строку из 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 - один фиг не получается.
Подскажите куда копать.

gamm
Гуру
Сообщения: 4044
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1049
Ваше звание: программист
Откуда: Казань

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

Сообщение gamm » 25 янв 2021, 08:42

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

Cancer
Участник
Сообщения: 56
Зарегистрирован: 25 фев 2009, 20:55
Репутация: 3
Откуда: Инструментарий для MapInfo
Контактная информация:

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

Сообщение Cancer » 25 фев 2021, 09:26

Попробуйте так:

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

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

spawner
Активный участник
Сообщения: 103
Зарегистрирован: 09 окт 2009, 16:49
Репутация: 10

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

Сообщение spawner » 25 мар 2021, 14:59

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

Ответить

Вернуться в «MapInfo»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя