Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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 |
|
Вернуться к началу |
|
 |
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 нашел в гугл темах (форум такой) |
|
Вернуться к началу |
|
 |
|