Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];

Вниз

Тип, совместимый и со String и с PChar   Найти похожие ветки 

 
Dr. Genius   (2006-10-21 08:04) [0]

Здравствуйте!

String можно преобразовать в PChar, PChar можно преобразовать в String. А существует ли в Delphi такой тип, совместимый и со String и с PChar без дополнительного преобразования? Мне в частности надо как-то объявить в качестве аргумента функци строку, совместимую с обоими из вышеперечисленных типов (чтобы не было ошибок “Incompatible types: ‘String’ and ‘PChar’”).


 
Loginov Dmitry ©   (2006-10-21 09:24) [1]

function GetLength(const S: string): Integer;
begin
 Result := Length(S);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 P: PChar;
begin
 P := "Строка";
 ShowMessageFmt("%d", [GetLength(P)]);
end;


 
Virgo_Style ©   (2006-10-21 10:25) [2]

может, overload использовать?


 
Desdechado ©   (2006-10-21 19:14) [3]

Variant


 
Джо ©   (2006-10-21 19:28) [4]

procedure ShowMe (const{или var} S);
begin
 ShowMessage (string(S))
end;

:)


 
@!!ex ©   (2006-10-22 10:06) [5]


> Dr. Genius   (21.10.06 08:04)  


Как тут уже сказали - overload не плохое решение.
Но я почемуто предполагаю, что вы не знаете что это....


Procedure  ProcessString(S:PChar); overload;
Procedure  ProcessString(S:String); overload;

....

Procedure  ProcessString(S:PChar);
begin
 ProcessString(string(S));
end;

Procedure  ProcessString(S:String);
begin
end;


Вариант Джо - тоже вариант.


 
Dr. Genius   (2006-10-22 13:27) [6]

По-моему меня не так поняли.
Как объявить string-переменную в качестве параметра функции так, чтобы не возникало ошибок о несовместимости типов, независимо от того, параметр какого типа (string или PChar) требуется этой функции.

var
 S: string;
begin
 S := "open";
 ShellExecute(Form1.Handle, ProcessString(S), "C:\...", nil, nil, SW_SHOW);

Вариант, предложенный @!!ex не подходит. При выполнении выложенного мной кода возникает ошибка: Incompatible types: "procedure, untyped pointer or untyped parameter" and "PChar".


 
Ketmar ©   (2006-10-22 13:31) [7]

чукча не читатель?


 
sniknik ©   (2006-10-22 14:17) [8]

> По-моему меня не так поняли.
поняли правильно, именно так как написано

даже в уточнении
> Как объявить string-переменную в качестве параметра функции так ...
продолжаешь, хотя в примере скорее угадывается вопрос "как передать в функцию с параметром типа PChar переменную типа string"...


 
@!!ex ©   (2006-10-22 14:28) [9]


> Dr. Genius

походу это вы чего то не так понимаете. ;)


 
Gero ©   (2006-10-22 15:25) [10]

Автор, ты сам хоть знаешь чего хочешь?
Напиши конкретно, зачем тебе это надо, можешь даже код выложить. Если, конечно, он не маркирован грифом «Совершенно секретно».


 
Dr. Genius   (2006-10-25 19:37) [11]

В общем, я пишу программу для защиты строк в исходниках Delphi (наподобие Delphi String Protect, если кто знает). Вкратце принцип работы программы такой: сканируется файл *.pas на наличие в нем строк; далее эти строки заменяются вызовом функции с определенными параметрами для каждой конкретной строки (чтобы exe-файл программы после компиляции не содержал строк в открытом виде). Так вот, эта функция естественно возвращает значение типа String. Поэтому при обработке файла *.pas, если встречаются строки типа PChar, то на их месте ставится эта ф-ия, возвращающая String. Неизбежно возникают ошибки о несовместимости типов (String и PChar). Можно ли избежать этих ошибок?


 
Anatoly Podgoretsky ©   (2006-10-25 19:51) [12]

В файле *.pas нет никаких PChar строк.


 
Loginov Dmitry ©   (2006-10-25 19:51) [13]

Dr. Genius   (25.10.06 19:37) [11]


Брррредддд!


 
Джо ©   (2006-10-25 19:52) [14]

> Так вот, эта функция естественно возвращает значение типа
> String.

Почему бы ей не возвращать string, когда заменяет параметр string и PChar, когда заменяет параметр PChar?


 
Dr. Genius   (2006-10-26 08:10) [15]


> Почему бы ей не возвращать string, когда заменяет параметр
> string и PChar, когда заменяет параметр PChar?


А как тогда узнать, какой параметр заменяется?


 
Сергей М. ©   (2006-10-26 10:54) [16]


> Dr. Genius   (25.10.06 19:37) [11]



> для защиты строк в исходниках Delphi


А причем здесь EXE ?


 
Джо ©   (2006-10-26 12:13) [17]

> [15] Dr. Genius   (26.10.06 08:10)

> А как тогда узнать, какой параметр заменяется?

Ну ты же их заменяешь, кому знать, как не тебе?


 
Плохиш ©   (2006-10-26 13:44) [18]


> (чтобы exe-файл программы после компиляции не содержал строк
> в открытом виде)

Может попробовать писать строки без использования нецензурного сленга, тогда и шифровать ничего не придётся.


 
Плохиш ©   (2006-10-26 14:03) [19]


> Dr. Genius   (26.10.06 08:10) [15]
>
> > Почему бы ей не возвращать string, когда заменяет параметр
>
> > string и PChar, когда заменяет параметр PChar?
>
>
> А как тогда узнать, какой параметр заменяется?

Делфи - это такой язык, в котором все переменные/параметры должны быть описаны до использования. Соответственно сохраняй описания и в нужном месте проверяй по списку тип.


 
Ketmar ©   (2006-10-26 14:30) [20]

>[19] Плохиш(c) 26-Oct-2006, 14:03
>сохраняй описания и в нужном месте проверяй по списку тип.
так это ж парзер писать надо. давайте лучше помолчим. а то появится ещё одна ветка, где будут вопросы о парзере. а автору ещё рановато это делать...


 
Gloomer ©   (2006-10-26 15:45) [21]

>[20] Ketmar ©   (26.10.06 14:30) ну надо же на чем-то учиться...
ИМХО без парсера действительно будет трудно обойтись.
К тому же интересно, как Dr. Genius определяет, что это именно строковая переменная - по одинарным кавычкам? Тогда он забыл еще про некоторые типы переменных, например Char, array of char...


 
Ketmar ©   (2006-10-26 15:46) [22]

>[21] Gloomer(c) 26-Oct-2006, 15:45
да тут вообще подход в корне неверный. например -- автор твёрдо уверен, что после "шифрования" в строках типа PChar не появится #0 посерёдке? %-)



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.096 c
15-1161573842
Slider007
2006-10-23 07:24
2006.11.12
С днем рождения ! 21 октября


15-1161509089
Чапаев
2006-10-22 13:24
2006.11.12
Афоризмы


15-1161887041
ProgRAMmer Dimonych
2006-10-26 22:24
2006.11.12
Delphi взглючнуть решил


15-1161784533
Сергиус
2006-10-25 17:55
2006.11.12
java приложения и игры


15-1160665605
Marser
2006-10-12 19:06
2006.11.12
Ура!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский