Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Тип, совместимый и со String и с PChar [D6, 95/98]


Страницы:   1 2

Dr. Genius ©   (2006-10-21 08:04:00) 

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

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


Ketmar   (2006-10-26 15:46:00) [1]

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


Gloomer   (2006-10-26 15:45:00) [2]

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


Ketmar   (2006-10-26 14:30:00) [3]

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


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


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

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


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


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

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


Джо   (2006-10-26 12:13:00) [6]

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

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

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


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


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



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


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


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


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


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


Джо   (2006-10-25 19:52:00) [9]

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

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


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

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


Loginov Dmitry   (2006-10-25 19:51:00) [11]

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


Брррредддд!


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

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


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

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


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


> Dr. Genius

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


sniknik   (2006-10-22 14:17:00) [15]

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

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


Ketmar   (2006-10-22 13:31:00) [16]

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


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

По-моему меня не так поняли.
Как объявить 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'.


@!!ex   (2006-10-22 10:06:00) [18]


> 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;


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


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

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

:)


Desdechado   (2006-10-21 19:14:00) [20]

Variant


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо