powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / проблема с PChar в dll
16 сообщений из 16, страница 1 из 1
проблема с PChar в dll
    #32327483
SergeyNew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ф-ция из dll возвращает строку, вернее указатель на нее (тип PChar), но при этом непонятно почему иногда обрезается 2 последних символа, причем предпоследний заменяется на 0. Может кто сталкивался с такой проблемой?
...
Рейтинг: 0 / 0
проблема с PChar в dll
    #32327559
SiDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А код можно?
...
Рейтинг: 0 / 0
проблема с PChar в dll
    #32327567
SergeyNew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
обявление в вызывающей программе:

var
function SumPropis(const sum, razdelitel:PChar):PChar; stdcall; external 'sumtoint.dll';

вызов:
var Plat_sum:string;
sim: PChar;
StrPCopy(sum,Plat_sum);
ParValue:=(SumPropis(sum,','));


описание в dll:

function SumPropis(const sum_, razdelitel_:PChar):PChar; stdcall;
var
out1:array[1..3] of string;
kop,kop1:string;
begin
...
Result:=PChar(Trim(out1[3]+' '+out1[2]+' '+out1[1]+' '+kop+' '+kop1));
end;
...
Рейтинг: 0 / 0
проблема с PChar в dll
    #32327603
SiDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SumPropis(sum,',') если это 6,7 то тут может быть глюк...
тут недавно было осуждение этого...
s:=',';
SumPropis(sum,PChar(s)))
kop или kop не содержат нулевых символов?
...
Рейтинг: 0 / 0
проблема с PChar в dll
    #32327629
SergeyNew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
попробовал

s:=',';
SumPropis(sum,PChar(s)))

не работает, в смысле то же самое получается kop или kop1 могут быть равны ''
...
Рейтинг: 0 / 0
проблема с PChar в dll
    #32327630
ZrenBy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>ParValue:=(SumPropis(sum,','));

ParValue у тебя что ? PChar ?, String ?
...
Рейтинг: 0 / 0
проблема с PChar в dll
    #32327669
SergeyNew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ParValue: Variant
...
Рейтинг: 0 / 0
проблема с PChar в dll
    #32327901
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не видно, где выделяется память для параметра sum который pchar, как это требуется хелпом по StrPCopy.
...
Рейтинг: 0 / 0
проблема с PChar в dll
    #32328086
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dankov
к твоему ответу хочется добавить что не видно где выделяется память под результат...

Автору топика хочется рекомендовать полистать теорию... как работать с dll... в частности из под дельфи. Здесь конечно можно ответить, но боюсь потом появится ряд новых ошибок....
...
Рейтинг: 0 / 0
проблема с PChar в dll
    #32328144
SergeyNew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>Не видно, где выделяется память для параметра sum который pchar, как это требуется хелпом по StrPCopy.

и где здесь написано, что надо выделять память:

StrPCopy copies a Pascal-type string Source into a null-terminated string Dest. It
returns a pointer to Dest.
StrPCopy does not perform any length checking.
The destination buffer must have room for at least Length(Source)+1 characters.

>Автору топика хочется рекомендовать полистать теорию... как работать с dll... в частности из под дельфи

А можно какую-нибудь ссылочку?
...
Рейтинг: 0 / 0
проблема с PChar в dll
    #32328164
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
>> и где здесь написано, что надо выделять память:

StrPCopy copies a Pascal-type string Source into a null-terminated string Dest. It
returns a pointer to Dest.
StrPCopy does not perform any length checking.
The destination buffer must have room for at least Length(Source)+1 characters.





eNose
...
Рейтинг: 0 / 0
проблема с PChar в dll
    #32328176
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergeyNew
боюсь не получится..... я частисно в книгах читал, частично на опыте, частично в хелпе...
...
Рейтинг: 0 / 0
проблема с PChar в dll
    #32328226
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор писал:и где здесь написано, что надо выделять память:

StrPCopy copies a Pascal-type string Source into a null-terminated string Dest. It
returns a pointer to Dest.
StrPCopy does not perform any length checking.
The destination buffer must have room for at least Length(Source)+1 characters.

Это написано в последней строчке. По-русски будет так:
Буфер назначения обязан иметь пространство по крайней мере как длина строки Source и еще один байт.
...
Рейтинг: 0 / 0
проблема с PChar в dll
    #32328431
SergeyNew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пробовал сейчас, выделял память и под "sum" и под результат, ничего не изменилось.

var
res, sum: PChar;
ParValue: Variant;

try
res:=allocmem(100); //результат
sum:=allocmem(18); //передавaемый параметр
StrPCopy(sum,Plat_sum);
StrPCopy(r,SumPropis(sum,','));
ParValue:=StrPas(r);
finally
FreeMem(r);
freemem(sum_);
end;
...
Рейтинг: 0 / 0
проблема с PChar в dll
    #32328557
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, все не так.

Посмотри, как возвращается имя компьютера через GetComputerName в модуле Windows и сделай также (не через возврат результата, а через параметры). Внутри DLL при этом заполняется предоставленный параметрами буфер без изменения указателя - там можно применить процедуру Move для копирования симовлов из обычного string в этот буфер pchar.

А вот как оно в дельфи вызывается:

function GetCompName:string;
var sz:dword;
begin
sz:=MAX_COMPUTERNAME_LENGTH + 1;
SetLength(result, sz);
Win32Check(GetComputerName(pchar(result),sz));
SetLength(result, sz);
end;

Для входных параметров у тебя вообще ничего не нужно (никаких StrPCopy). Преобразование pchar(var_str) отлично работает.
...
Рейтинг: 0 / 0
проблема с PChar в dll
    #32328764
SergeyNew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал через параметры. Всем спасибо.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / проблема с PChar в dll
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]