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

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
18.11.2003, 15:21
    #32327603
SiDen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с PChar в dll
SumPropis(sum,',') если это 6,7 то тут может быть глюк...
тут недавно было осуждение этого...
s:=',';
SumPropis(sum,PChar(s)))
kop или kop не содержат нулевых символов?
...
Рейтинг: 0 / 0
18.11.2003, 15:39
    #32327629
SergeyNew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с PChar в dll
попробовал

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

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

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

Автору топика хочется рекомендовать полистать теорию... как работать с dll... в частности из под дельфи. Здесь конечно можно ответить, но боюсь потом появится ряд новых ошибок....
...
Рейтинг: 0 / 0
19.11.2003, 08:39
    #32328144
SergeyNew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с PChar в dll
>Не видно, где выделяется память для параметра 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
19.11.2003, 09:13
    #32328164
eNose
Участник
[не активирован]
[не одобрен]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с PChar в dll
>> и где здесь написано, что надо выделять память:

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
19.11.2003, 09:29
    #32328176
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с PChar в dll
SergeyNew
боюсь не получится..... я частисно в книгах читал, частично на опыте, частично в хелпе...
...
Рейтинг: 0 / 0
19.11.2003, 10:07
    #32328226
ziktuw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с PChar в dll
автор писал:и где здесь написано, что надо выделять память:

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
19.11.2003, 11:58
    #32328431
SergeyNew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с PChar в dll
пробовал сейчас, выделял память и под "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
19.11.2003, 12:48
    #32328557
ziktuw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с PChar в dll
Не, все не так.

Посмотри, как возвращается имя компьютера через 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
19.11.2003, 14:23
    #32328764
SergeyNew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с PChar в dll
Сделал через параметры. Всем спасибо.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / проблема с PChar в dll / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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