![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| klyaksa |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 187 Регистрация: 15.9.2005 Репутация: нет Всего: нет |
Под 7 все хорошо, по ХР не открывается ссылка по коду:
В чем проблема? В старой версии, вроде, работало. Сейчас дельфи 2009. |
|||
|
||||
| xkor |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 8.1.2007 Где: Питер Репутация: 1 Всего: 4 |
klyaksa, а вы учли что начиная с дельфи 2009 PChar = PWideChar, а предыдущих версиях было PAnsiChar?
|
|||
|
||||
| Proxin |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 363 Регистрация: 21.6.2008 Репутация: 1 Всего: 3 |
slink должен обязательно начинаться с http://
|
|||
|
||||
| klyaksa |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 187 Регистрация: 15.9.2005 Репутация: нет Всего: нет |
Вот мой (проблемный) код:
Это сообщение отредактировал(а) klyaksa - 25.9.2010, 20:15 |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
klyaksa, а почему второй параметр nil
В твоём случае это open и в третьем параметре можно заменить pChar на PAnsiChar klyaksa, если тебе лень открыть справку или MSDN, то вот, читай, лентяй: и обрати внимание на Remarks, там есть пример
Это сообщение отредактировал(а) Akella - 25.9.2010, 22:37 |
|||
|
||||
| CodeMonkey |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 38 Всего: 89 |
Сам же и указал:
Пуск/выполнить, ввести ссылку - будет работать? Возможно, проблема просто в нарушенных ассоциациях. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
| xkor |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 8.1.2007 Где: Питер Репутация: 1 Всего: 4 |
я бы дополнил:
а то компилятор не верно поймёт.., ну или сразу в AnsiString хранить:
Это сообщение отредактировал(а) xkor - 26.9.2010, 04:16 |
||||
|
|||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
||||
|
||||
| 0x0027 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 29.1.2010 Репутация: нет Всего: -1 |
||||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
Можно. Только ответь вначале на пару вопросов.
А клавиша F1 не выламана? Или может тебя в гуле забанили? Или мы специально для тебя должны сделать поиск и привести здесь цитаты? |
|||
|
||||
| 0x0027 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 29.1.2010 Репутация: нет Всего: -1 |
я оценил ваш искрометный юмор.
предположим, что со мной случилось все вышеперечисленное. теперь я могу узнать разницу? Добавлено через 3 минуты и 43 секунды зы если ты хочешь провести аналогию между NULL из мсдн с делфевской функцией Null, то это как минимум.. эм.. неразумно =) |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
никакого юмора Просто я уверен, что ответ уже есть, не в справке, так в гугле. А некоторые ленятся искать. Добавлено через 3 минуты и 59 секунд Если кратко, что Nil — это для указателей, а Null — для переменных вариантного типа. Добавлено через 8 минут и 29 секунд ms-help://borland.bds5/devcommon/pointertypes_xml.html
|
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
ms-help://borland.bds5/delphivclwin32/Variants_Null.html
Хватит? |
|||
|
||||
| БелАмор |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 10.6.2010 Где: Россия Репутация: 5 Всего: 17 |
||||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
Ну товарищи дорогие
Это сообщение отредактировал(а) Akella - 26.9.2010, 21:38 |
|||
|
||||
| CodeMonkey |
|
||||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 38 Всего: 89 |
Akella, ты чего троллишь?
Добавлено через 3 минуты и 23 секунды
Вы чего ваще творите? Сейчас у человека такая каша в голове будет. Правильными вариантами могут быть только: 1.
2.
3.
Всё! Никаких "ShellExecute(0, nil, PAnsiChar". -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
||||||||
|
|||||||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
||||
|
||||
| Keeper89 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 20 Всего: 58 |
Этот будет рабочий. CodeMonkey правильно сказал, что без указания конкретного строкового типа sLink это пустая болтовня и привел возможные варианты. Это сообщение отредактировал(а) Keeper89 - 26.9.2010, 23:56 |
|||
|
||||
| 0x0027 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 29.1.2010 Репутация: нет Всего: -1 |
||||
|
||||
| 0x0027 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 29.1.2010 Репутация: нет Всего: -1 |
не будет работать. ибо ShellExecuteW. компилятор попросту не пропустит. вообще топик бессмысленный. самая вероятная причина указана в первом ответе CodeMonkey Добавлено через 4 минуты и 2 секунды и последнее, вопрос к топикстартеру: а какое значение собственно говоря возвращает ваша "проблемная" функция? |
|||
|
||||
| Keeper89 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 20 Всего: 58 |
||||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
Ты что... совсем? Какие ошибки? Добавлено через 2 минуты и 8 секунд Мой код, мой пример, работает уже лет пять. Это значит, что я оказался неправ? Добавлено через 3 минуты и 31 секунду Ещё раз обратите на второй параметр. http://forum.vingrad.ru/index.php?showtopi...t&p=2218559 И что там нужно указывать. Это сообщение отредактировал(а) Akella - 27.9.2010, 10:01 |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Юзай ShellExecuteEx. Собственно, ShellExecute его и юзает. Но вот с кодировками порой дружит плохо.
Вот такая функция работает корректно:
|
|||
|
||||
| 0x0027 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 29.1.2010 Репутация: нет Всего: -1 |
||||
|
||||
| CodeMonkey |
|
||||||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 38 Всего: 89 |
Это нерабочий код! Не ври ;) Вы это не видели что-ли? Этот ваш код в D2009 эквивалентен:
Как несложно догадаться, это работать не должно. И например?..
Если что-то работает - это ещё не означает, что это вообще должно работать. Вывод о работоспособности кода не должен основываться (только) на эксперименте. Да, ты неправ. Почему - я указал выше.
Для слепых цитирую ещё раз:
Это - цитата из MSDN. Что означает, что этот текст написан для C/C++. Что такое NULL в C-языках? Это нулевой указатель. В Delphi это будет nil. Переводя MSDN на Delphi, получаем:
P.S. Как несложно догадаться, NULL в Delphi <> NULL в C/C++. Это сообщение отредактировал(а) CodeMonkey - 27.9.2010, 16:03 -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
||||||||||
|
|||||||||||
| Akella |
|
||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
2009 Приношу извинения. Беру слова обратно. Добавлено через 8 минут и 18 секунд
я не знаю, что там у автора в sLink, но у меня код работает и на семёрке и на XP Скомпилировал на D2010. Программа запускает браузер и в нём открывается сайт |
||||
|
|||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Пример кривой работы с кодировками могут наблюдать пользователи qip.
Там как раз возникают проблемы, при попытке открыть урл, где есть национальные символы. Таких много в википедии. Также есть проблемы с открытием урлов в файрфоксе, если есть русские буквы. Да и вообще, ShellExecute - всего лишь упрощённая обёртка над ShellExecuteExW. |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
Т.е. если в sLink будет русский текст, ту будут проблемы?
|
|||
|
||||
| klyaksa |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 187 Регистрация: 15.9.2005 Репутация: нет Всего: нет |
Никто не забыт, ничто не забыто... 1. Про Ansi - я ж написал 2009, следовательно ShellExecute работает с PAnsiChar. Ну так с этим, вроде, разобрались. Но для эксперимента проверю ShellExecuteA. 2. Про 'open' - вроде не обязателен, но проверю... Просто в виртуальной машине работет на хп, а до реального, где заметил косяк не доберусь. |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
klyaksa, открой великую тайну, скажи что в sLink
|
|||
|
||||
| CodeMonkey |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 38 Всего: 89 |
Где тут национальные символы? http://ru.wikipedia.org/wiki/%D0%97%D0%B0%...%B8%D1%86%D0%B0 -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
| Xenag |
|
|||
![]() Шустрый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 51 Регистрация: 6.3.2010 Репутация: нет Всего: нет |
Какбы вот: Заглавная_страница
Добавлено через 3 минуты и 20 секунд Не все браузеры урлэнкодят. Большинство современных браузеров глотают урлы в естественном виде. Добавлено через 4 минуты и 7 секунд ЗЫ. президент.рф |
|||
|
||||
| Keeper89 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 20 Всего: 58 |
||||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
В Edit1.text находится значение http://президент.рф/ Откомпилировал в D2010. Запускал в Windows 7 и в Windows XP. На обоих ОС код срабатывает и браузер отображает сайт. Что я делаю не так? |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Я же написал, что может работать не так, а не будет.
На одной машине всё так, на другой всё не так. От чего зависит - я так и не разобрался. В своих исследованиях расковырял всю ShellExecute. Она мне не понравилась, решил заюзать ShellExecuteEx напрямую. Проблема пропала. Я просто делюсь граблями, на которые наступал... |
|||
|
||||
| klyaksa |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 187 Регистрация: 15.9.2005 Репутация: нет Всего: нет |
В sLink ничего криминального национального, там 'http://mytest.klyaksa.net' + номер версии ПО.
Сегодня проверил там где не работает: ShellExecute возвращает код ошибки { The system cannot write to the specified device. } ERROR_WRITE_FAULT = 29; {$EXTERNALSYM ERROR_WRITE_FAULT} |
|||
|
||||
| Akella |
|
||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
http://www.microsoft.com/communities/newsg...amp;m=1&p=1 Добавлено через 3 минуты и 13 секунд
нашёл ещё ссылки на такую ошибку, но там вообще идёт речь о принтере Добавлено через 5 минут и 44 секунды klyaksa, попробуй так
|
||||
|
|||||
| CodeMonkey |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 38 Всего: 89 |
Слушай, Akella, настоятельно рекомендую сюда больше не писать. Ты постоянно какой-то бред несёшь. Никакой GetLastError/RaiseLastOSError для ShellExecute не работает.
Хотите GetLastError - используйте ShellExecuteEx. И где же вы умудрились найти ERROR_WRITE_FAULT среди кодов ошибок из таблички выше? Ещё раз: Пуск/Выполнить, ввести URL, нажать Enter - работать будет? Ты меня слушай, я тут самые умные вещи говорю Это сообщение отредактировал(а) CodeMonkey - 29.9.2010, 18:29 -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
| klyaksa |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 187 Регистрация: 15.9.2005 Репутация: нет Всего: нет |
Сейчас затрудняюсь с ответом. Но код ошибке был 29, значит по идее это {$EXTERNALSYM SE_ERR_DDEFAIL} SE_ERR_DDEFAIL = 29; Транзакция динамического обмена данными провалилась. Только что это значит? Ввести урл попробую завтра. Это сообщение отредактировал(а) klyaksa - 29.9.2010, 20:34 |
|||
|
||||
| Xenag |
|
|||
![]() Шустрый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 51 Регистрация: 6.3.2010 Репутация: нет Всего: нет |
SE_ERR_DDEFAIL означает, что программа для передачи параметров использует DDE.
И ваш вариант не прокатил, ибо что-то было неправильно сделано и параметр не был передан. Вот уж раздули на 3 страницы. Проблемы-то нет. Просто передается кривой параметр, который 7-ка по мудрости преобразовывает в нормальный, а ХР не умеет. Дело не в коде, а в неправильной строке. |
|||
|
||||
| CodeMonkey |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 38 Всего: 89 |
Ничего это не значит. GetLastError не равно возвращаемому ShellExecute значению. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
| klyaksa |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 187 Регистрация: 15.9.2005 Репутация: нет Всего: нет |
||||
|
||||
| CodeMonkey |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 38 Всего: 89 |
Обратите внимание, как вы могли бы получить этот результат пять дней назад:
Ну если то проблема - SE_ERR_DDEFAIL. Означает это проблемы с файловыми ассоциациями. На той машине ссылка открывается с помощью DDE. И по какой-то причине это становится неудачным. Можно попробовать ShellExecuteEx для получения более детализированного кода ошибки (через GetLastError) или же можно залезть в реестр и поискать проблему руками. А можно просто переустановить браузер, чтобы он починил свои ассоциации. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
||||
|
|||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |