Подскажите, пытаюсь передать строку из 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 - один фиг не получается.
Подскажите куда копать.
Передача строки из Mapbasic в DLL (Delphi)
-
- Активный участник
- Сообщения: 107
- Зарегистрирован: 09 окт 2009, 16:49
- Репутация: 10
-
- Гуру
- Сообщения: 4067
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1062
- Ваше звание: программист
- Откуда: Казань
Re: Передача строки из Mapbasic в DLL (Delphi)
string на delphi - это весьма специфическая конструкция. Насколько я помню (уж очень давно это было), из Мапвасика передается адрес символьной строки, и встречать его нужно соответственно. См тут, например
-
- Участник
- Сообщения: 56
- Зарегистрирован: 25 фев 2009, 20:55
- Репутация: 3
- Откуда: Инструментарий для MapInfo
- Контактная информация:
Re: Передача строки из Mapbasic в DLL (Delphi)
Попробуйте так:
Dll на Delphi:
procedure zzz(s:LPCSTR);stdcall;
begin
showmessage(s);
end;
Код Mapbasic:
Declare Sub zzz Lib "MyDll.dll" (s as String * 255)
Dll на Delphi:
procedure zzz(s:LPCSTR);stdcall;
begin
showmessage(s);
end;
Код Mapbasic:
Declare Sub zzz Lib "MyDll.dll" (s as String * 255)
-
- Активный участник
- Сообщения: 107
- Зарегистрирован: 09 окт 2009, 16:49
- Репутация: 10
Re: Передача строки из Mapbasic в DLL (Delphi)
В общем я затупил, сделал локальную переменную в мапбэйсике, и в момент вызова процедуры в dll она уже была уничтожена заменил на глобальную и все заработало.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя