Войти

Показать полную графическую версию : Delphi|Работа с ярлыками.Типы данных.


Crowner
17-08-2006, 04:57
Везде в инете один и тот-же пример работы с ярлыками.Поэтому я его сюда включать не буду.Но проблема собственно вот в чем.
Вот это работает:
FillChar(LinkInfo, SizeOf(LinkInfo), #0);
LinkInfo.FullPathAndNameOfLinkFile:='С:\Ярлык.lnk';
GetLinkInfo(@LinkInfo);
link:=LinkInfo.FullPathAndNameOfFileToExecute;
А вот это уже нет:
FillChar(LinkInfo, SizeOf(LinkInfo), #0);
perem:='С:\Ярлык.lnk';
LinkInfo.FullPathAndNameOfLinkFile:=perem;
GetLinkInfo(@LinkInfo);
link:=LinkInfo.FullPathAndNameOfFileToExecute;
[Error] Unit1.pas(329): Incompatible types: 'Array' and 'String'

Я для perem уже какие только типы ни пробовал.Подскажите пожалуйста !
Заранее благодарен !

ivank
17-08-2006, 13:21
Проблема в том, что у perem тип String, а LinkInfo.FullPathAndNameOfFileToExecute - array of char. Надо преобразовать одно в другое, например так:
procedure stringtoarray(ar:PChar; str:string; beg:integer; length:integer);
var i:integer;
begin
inc(ar, beg-1);
for i:=1 to length do
begin
ar^:=str[i];
inc(ar);
end;
end;
Найдено в гугле по запросу Delphi+StringToArray. Наверняка есть стандартная функция, но мне лень с дельфи разбираться.

XCodeR
17-08-2006, 13:39
Crowner
ivank, как всегда прав...
а функция ткаого вида: var.c_str();
посомтри в хелпе по "объекту" String....

Crowner
19-08-2006, 20:19
Не получается преобразовать :(

ivank
19-08-2006, 22:37
Рискну предположить, что StringToArray(LinkInfo.FullPathAndNameOfLinkFile, perem, 1, length(perem)+1); вам поможет. Дельфей не имею, так что никак не проверить. Ещё можно попробовать LinkInfo.FullPathAndNameOfLinkFile := Addr(perem). Но вряд ли поможет. Не знаком я с дельфи :(

XCodeR
ivank не всегда прав, просто старается молчать, когда не знает что сказать по делу :) Кстати, c_str() в дельфях нет, её роль выполняет просто преобразование к PChar (через Addr). Это фишка builder'овских String (или AnsiString, или как их там), чтобы более удачно маскироваться под std::string.




© OSzone.net 2001-2012