Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 991
от 27.11.2007, 23:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 443, Экспертов: 58
В номере:Вопросов: 4, Ответов: 5


Вопрос № 110464: Здравствуйте Допустим у компа есть несколько IP адресов. один от Dail Up модема, второй от сетевухи, третий от DSL или другого высокоскоростного соединения, а четвертый вообще 127.0.0.1. Вопрос - как выявить IP подключенный к интернету? Спаси...
Вопрос № 110488: Здраствуйте. Вот привело меня к Вам такая проблема. В хпх есть функция pack — Pack data into binary string. Вот описание её: string pack ( string $format [, mixed $args [, mixed $...]] ) Ищю аналог её на дельфи в пхп скрипте есть таки...
Вопрос № 110515: Доброго времени суток. Есть процедура (в приложении qqq), у которой в параметрах передается переменная типа record. Теперь хочется ее запихнуть в dll. Подскажите,пожалуста, как это сделать. P.S.:расказывать как делать dll с подпрограммами у котор...
Вопрос № 110588: Здравствуйте, уважаемые эксперты! Не могу понять, что за ошибки: 1. GetDriveType(PChar(drive)), выдает - Invalid typecast. где drive: shortstring ну а GetDriveType(@(drive)[1]) - работает нормально, в чем проблема? 2. Пишу программу, которая ...

Вопрос № 110.464
Здравствуйте
Допустим у компа есть несколько IP адресов. один от Dail Up модема, второй от сетевухи, третий от DSL или другого высокоскоростного соединения, а четвертый вообще 127.0.0.1. Вопрос - как выявить IP подключенный к интернету?
Спасибо.
Отправлен: 21.11.2007, 23:51
Вопрос задал: Slaer (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: PavelGM
Здравствуйте, Slaer!

Попробуйте так: через сокет соединиться с заведомо работающим сайтом по порту HTTP(80), а потом посмотреть в свойствах сокета LocalAdress - это им будет IP.

Ответ отправил: PavelGM (статус: Студент)
Ответ отправлен: 23.11.2007, 10:22
Оценка за ответ: 3
Комментарий оценки:
Уже пробовал и ClientSocket и через Powersock подключатся !!! всеравно в свойствах LocalAdress (LocalIP) получаю неверный айпишник! Странно както ! Может есть еще какойто способ? Подскажите пожалуйста.

Отвечает: Denisss

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

К ответу прикреплен файл [197 K], содержащий пример такой проверки.

В принципе, он реализует именно то, что рекомендовал эксперт PavelGM.

Несколько комментариев:

Проверяет наличие соединения с Интернет функция function checkIP(const anIP: String): Boolean;,
где anIP: String - локальный IP адрес. Удаленный хост функция берез из Edit5: TEdit (по умолчанию туда прописан популярный хост).
Для подключения по 80-му порту используется компонент TIdTCPClient с вкладки Indy Clients (у меня Delphi 7-й версии).
Чтобы указать компоненту TIdTCPClient локальный IP адрес, у него есть свойство BoundIP: String.

Для подключения к хосту, я даю компоненту 100 мс (Connect(100);). Если для модемного соединения этого мало, то увеличьте его.

Получение списка локальных IP адресов осуществляе т функция function collectIPs: TStringList;. Реализацию данной функции можно найти в Интернете на сайтах, посвященных Delphi, потому ее расписывать не буду.

Удачи!

Прикреплённый файл: Загрузить >>
Срок хранения файла на сервере RusFAQ.ru составляет 30 суток с момента отправки ответа.
---------
Будь осторожен, когда молишься ради чего-то, потому что можешь это получить...

Ответ отправил: Denisss (статус: Профессионал)
Россия, Москва
----
Ответ отправлен: 24.11.2007, 14:37
Оценка за ответ: 5
Комментарий оценки:
Спасибо


Вопрос № 110.488
Здраствуйте.
Вот привело меня к Вам такая проблема.
В хпх есть функция pack — Pack data into binary string.
Вот описание её: string pack ( string $format [, mixed $args [, mixed $...]] )
Ищю аналог её на дельфи в пхп скрипте есть такие строчки
$fs=@fsockopen($ip,$port) or die('Sock ERROR');
$pck=pack("vCi",6,0,-3);
fwrite($fs,$pck);
единственное понятно, что открывается сокет и записываеться параметр $pck.
Опять же напрашивается вопрос что это =) - "vCi",6,0,-3.
И есть ли такая же функция в дельфях? Если нет то как можно такое реализовать?
v - unsigned short (always 16 bit, little endian byte order)
C - unsigned char
i - signed integer (machine dependent size and byte order)
6,0,-3. - так и не разобрался...
Отправлен: 22.11.2007, 07:33
Вопрос задал: Gavrila (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 14)

Отвечает: sir henry
Здравствуйте, Gavrila!
Эта функция преобразует передаваемые ей данные в строку, формат которой задаётся первым по счёту аргументом. Следовательно, 6,0,-3 - это те данные, которые нужно перевести в строку.
Получается, что через сокет передаётся строка. :)
Прямого аналога такой функции в Delphi нет или, по крайней мере, я такой вспомнить не могу, но можно в цикле передавать числовые параметры функции Format(), которая уже будет формировать строку символов. Что-то типа:

Const
n = 2;
arr : array[0..n] of Integer = (6, 0, -3);
Var
i: integer;
s: string;
Begin
For i:=0 To n Do
s:=s+Format('&d', [arr[i]]);
End;

Здесь формируется строка из подстрок, в которые преобразуются из второго аргумента функции по формату, передаемый в первом аргументе. В данном случае "%d" - это знаковое целое. Формат выбран исходя из типа написанных Вами данных (6,0,-3).
Если что, спрашивайте в мини-фо руме...
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 22.11.2007, 08:26
Оценка за ответ: 5
Комментарий оценки:
даже прикопаться не к чему=)


Вопрос № 110.515
Доброго времени суток. Есть процедура (в приложении qqq), у которой в параметрах передается переменная типа record. Теперь хочется ее запихнуть в dll. Подскажите,пожалуста, как это сделать.
P.S.:расказывать как делать dll с подпрограммами у которых параметры "простых" типов не надо.

Приложение:

Отправлен: 22.11.2007, 11:38
Вопрос задал: Vezdenos (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Маренич Владимир
Здравствуйте, Vezdenos!

Замечание:
Если Вы используете тип string между EXE и DLL, то Вам нужно подключать модуль ShareMem (первым в USES и в EXE и в DLL), и таскать за EXE-шником borlndmm.dll
Чтобы этого избежать нужно пользоваться ТОЛЬКО shortstring или PChar (PAnsiChar). В последнем случае Вам необходимо самому отслеживать выделение и освобождение памяти под соотв. данные.

Относительно вопроса:
Если Вы объявите этот тип в DLL и в EXE, то никаких проблем. Объявление процедуры в DLL и описание в EXE будут такими же.
Можно использовать указатели на запись, хотя это практически то же, что и объявление var ..., так как фактически и в том и в другом случае будет передаваться указатель на содержимое переменной.

Если возникнут вопросы/трудности - пишите в мини-форум.

(см. приложение)

Приложение:

Ответ отправил: Маренич Владимир (статус: Студент)
Ответ отправлен: 22.11.2007, 12:06
Оценка за ответ: 5
Комментарий оценки:
1 часть: Угу. 2 часть: Спасибо.Ожидал чегото страшного, а попробывать вот так - напрямик, даже не догадывался.


Вопрос № 110.588
Здравствуйте, уважаемые эксперты! Не могу понять, что за ошибки:
1. GetDriveType(PChar(drive)), выдает - Invalid typecast. где drive: shortstring ну а GetDriveType(@(drive)[1]) - работает нормально, в чем проблема?
2. Пишу программу, которая реагирует обрабатывает сообщение WM_DEVICECHANGE необходимо что бы программа опознавала мою флешку. Так вот букву появившейся флешки определяет правильно ('H:' - такая форма необходима для GetDriveType, по крайней мере так гласит MSDN), но ранее упомянутая функция возвращает DRIVE_NO_ROOT_DIR, но как может быть no_root_dir, если путь реально существует?. Заранее спасибо за ответы.
PS: IDE - Delphi 7
Отправлен: 22.11.2007, 20:38
Вопрос задал: Beginner (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: PavelGM
Здравствуйте, Beginner!

1. См. совет sir_henry в мини-форуме

2. Опять же одно из отличий shortstring от string - отсутствие завершающего
Ответ отправил: PavelGM (статус: Студент)
Ответ отправлен: 23.11.2007, 10:30
Оценка за ответ: 5
Комментарий оценки:
Спасибо, понял. Но в таком случае нужно использовать не string, а AnsiString. String компилятором понимается как AnsiString, если в Project Options|Compiler установлен параметр Huge strings, или ShortString, если опция сброшена.


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.64 от 24.11.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное