www.map-info.ru :: Просмотр темы - Прочитать Delphi PChar в MapBasic
                               РќР° главную страницу сайта

 
                                
ВходВход    РегистрацияРегистрация    ПрофильПрофиль    ПользователиПользователи    ГруппыГруппы    FAQFAQ    ПоискПоиск  

 
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Предыдущая тема :: Следующая тема  
Автор Сообщение
sunzh



Зарегистрирован: 13.05.2006
Сообщения: 19

СообщениеДобавлено: Вс Ноя 13, 2016 11:00 pm    Заголовок сообщения: Прочитать Delphi PChar в MapBasic Добавить ответ со ссылкой на данный текст

Function UIDSTR(): PChar; stdcall;
Var
G: TGUID;
begin
If CreateGuid(G) = 0 Then Result := PChar(GUIDToString(G));
end;

Не могу прочитать результат этой функции в мапбэйсике

Declare Function UIDSTR Lib "lib.dll" Alias "UIDSTR" () As String

Note UIDSTR() выдает только первый символ.

Пробовал по ссылке массив передавать, ничего не передается (массив пустой остается):

Function UIDSTR(var A: Pchar): Integer; stdcall;
Var
G: TGUID;
begin
If CreateGuid(G) = 0 Then A := PChar(GUIDToString(G));
result:=S_OK;
end;


Declare Function UIDSTR Lib "lib.dll" Alias "UIDSTR" (A(32) As string) As Integer

В А(32) ничего не заноситься.

Поделитесь опытом кто умеет. Спасибо.

P.S. Если функция возвращает результат в виде строки при запуске процедуры вылетает мапинфо (10 версия).
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
sunzh



Зарегистрирован: 13.05.2006
Сообщения: 19

СообщениеДобавлено: Пн Ноя 14, 2016 1:25 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

DLL (Delphi)
Function UIDSTR(var S: PChar): Integer; stdcall;
Var
G: TGUID;
begin
OleCheck(CoCreateGuid(G));
OleCheck(StringFromIID(G, S));
CoTaskMemFree(S);
Result := S_OK;
end;

MapBasic:

Declare Function CreateGUID Lib "lib.dll" Alias "UIDSTR" (G As String*32) As Integer

dim i as integer
dim G as String*32
G=String$(32," ")
i=CreateGUID(G)
Print G

Выдает кракозябры, но все время разные. Т.е. ГУИД генерится и передается, но в МИ отображается некорректно. что делать?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Андрей Могильный



Зарегистрирован: 21.03.2006
Сообщения: 864

СообщениеДобавлено: Пн Ноя 14, 2016 3:50 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Так попробуйте (у меня работает):
DLL (Delphi)
Function UIDSTR(S: PChar): Integer; stdcall;
...


MapBasic:

Declare Function CreateGUID Lib "lib.dll" Alias "UIDSTR" (G As String*32) As Integer

dim i as integer
dim G as String*32
i=CreateGUID(G)
Print G
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
sunzh



Зарегистрирован: 13.05.2006
Сообщения: 19

СообщениеДобавлено: Пн Ноя 14, 2016 5:18 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Не работает (Код идентичен за исключением отсутствия Var перед параметром в коде функции ДЛЛ, при передаче по значению записыватьсяв S ничего не будет)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
FedorinoFF



Зарегистрирован: 01.02.2007
Сообщения: 272
Откуда: Санкт-Петербург

СообщениеДобавлено: Ср Мар 01, 2017 10:57 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Под результат место надо выделить в памяти, например strAlloc()-ом
---------------------------
Function UIDSTR(): PChar; stdcall;
Var
G: TGUID;
s: string;
begin
Result:= nil;
If CreateGuid(G) = 0 Then
begin
s:= GUIDToString(G);
Result:= strAlloc(Length(s));
CopyMemory(Resul, PChar(s), Length(s));
end
end;
---------------------
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
sunzh



Зарегистрирован: 13.05.2006
Сообщения: 19

СообщениеДобавлено: Пн Июл 31, 2017 3:31 pm    Заголовок сообщения: Спасибо попробую потом Добавить ответ со ссылкой на данный текст

Пока пользуюсь ГУИДОМ на MB нашел в гугл темах (форум такой)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Top.Mail.Ru