Плагин для CommFort (Delphi)

Аватара пользователя
Andrey
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Andrey » 15 окт 2011, 21:40

Кажется да, но сейчас скорее всего дело не в ней. Хотя всё может быть. Я пока сравниваю версии на 2 языках и если найду существенные различия то попробую подправить

Аватара пользователя
Maximus
Супермодератор
Супермодератор
Сообщения: 1507
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Maximus » 15 окт 2011, 21:42

У нас ошибка происходит при обработке сообщений в PluginProcess, думаю вряд ли та функция влияет на эту процедуру.

Аватара пользователя
Andrey
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Andrey » 15 окт 2011, 21:47

Процедура PluginProcess у нас большая и там много всего есть. Плохо что конкретный фрагмент вызывающий ошибку определить почти невозможно.

Аватара пользователя
Maximus
Супермодератор
Супермодератор
Сообщения: 1507
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Maximus » 15 окт 2011, 21:49

Вся надежда на администрацию, которая может быть всё-таки уважит и ответит что это за ошибка.

Аватара пользователя
Andrey
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Andrey » 15 окт 2011, 21:52

Если бы у меня воспроизводилась ошибка и простое решение не было бы найдено, то переделал бы на c++ взяв основные функции из примера. Но останавливает размер плагина и то что эту версию придётся выкладывать чтобы её проверили.

Аватара пользователя
Andrey
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Andrey » 15 окт 2011, 21:56

Завтра ещё подумаю над тем что можно сделать

Аватара пользователя
Maximus
Супермодератор
Супермодератор
Сообщения: 1507
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Maximus » 16 окт 2011, 12:14

Похоже ошибка E90 не во всех плагинах, а только в смс и не в том который я кидал, а в другом, если отсутствует соединение с интернет плагин вылетает. Но плагин города и тот смс который я кидал тоже вроде бы вылетают. Как можно проверить есть соединение с интернет или нет?

Аватара пользователя
Andrey
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Andrey » 16 окт 2011, 12:44

Можно попытаться подключиться к какому-либо сайту. Если не успешно, то подключения нет. У меня где-то был такой код. Только вот я не уверен что при попытке подключения плагин не вылетит. Но в любом случае надо пробовать. А эксперимент с отсутствием доступа в интернет я проведу

Аватара пользователя
Andrey
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Andrey » 16 окт 2011, 13:06

Способ №1 - прстой
Нужно разместить на форме или создать компонент IdHTTP, объявить логическую переменную connected и для проверки использовать код
Try
 IdHTTP1.Get( 'http://mail.ru' );
 connected := True;
Except
 connected := False;
End;
Способ №2 - сложнее
Выложу если с первым способом будут какие-либо проблемы
Последний раз редактировалось Andrey 16 окт 2011, 13:06, всего редактировалось 4 раза.
Причина: Исправлена подсветка синтаксиса

Аватара пользователя
Maximus
Супермодератор
Супермодератор
Сообщения: 1507
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Maximus » 16 окт 2011, 13:16

IdHTTP1 тоже нужно объявить?

Аватара пользователя
Andrey
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Andrey » 16 окт 2011, 13:19

Будет проще поставить его на форму и использовать. Он на какой-то из вкладок Indy

Аватара пользователя
Maximus
Супермодератор
Супермодератор
Сообщения: 1507
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Maximus » 16 окт 2011, 13:24

Не вышло, плагин опять вылетел.

Аватара пользователя
Andrey
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Andrey » 16 окт 2011, 13:26

Вылетел по той же проблеме или из-за вставки этого кода?

Аватара пользователя
Maximus
Супермодератор
Супермодератор
Сообщения: 1507
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Maximus » 16 окт 2011, 13:30

Таже ошибка.

Аватара пользователя
Andrey
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Andrey » 16 окт 2011, 13:37

Тогда второй способ, но сразу скажу что не знаю как плагин будет работать с WinAPI.
Для начала подключить модуль для работы с WInAPI
uses ShellAPI
Вот функция которая делает проверку
function IsConnectedToInternet(lpdwFlags: LPDWORD): Boolean;
const
  WininetDLL = 'wininet.dll';
var
  hWininetDLL: THandle;
  dwReserved: DWORD;
  fn_InternetGetConnectedState: function(lpdwFlags: LPDWORD; dwReserved: DWORD): BOOL; stdcall;
begin
  Result := False;
  dwReserved := 0;
  hWininetDLL := LoadLibrary(WininetDLL);
  if hWininetDLL > 0 then
  begin
    @fn_InternetGetConnectedState := GetProcAddress(hWininetDLL,'InternetGetConnectedState');
    if Assigned(fn_InternetGetConnectedSta te) then
    begin
      Result := fn_InternetGetConnectedState(lpdwFl ags, dwReserved);
    end;
    FreeLibrary(hWininetDLL);
  end else
    raise Exception.Create('Unable to locate function InternetGetConnectedState in library ' + WininetDLL);
end;
Пример использования этой функции
procedure TForm1.Button1Click(Sender: TObject);
const
  INTERNET_CONNECTION_MODEM = 1;
  INTERNET_CONNECTION_LAN = 2;
  INTERNET_CONNECTION_PROXY = 4;
  INTERNET_CONNECTION_MODEM_BUSY = 8;
var
  dwConnectionTypes: DWORD;
begin
  dwConnectionTypes :=
    INTERNET_CONNECTION_MODEM +
    INTERNET_CONNECTION_LAN +
    INTERNET_CONNECTION_PROXY;
  if IsConnectedToInternet(@dwConnection Types) then
    ShowMessage('Connected.')
  else
    ShowMessage('Not Connected.')
end;
Всё что внутри if поменять на то что нужно. Если и это не пойдёт, то есть ещё способ
Последний раз редактировалось Andrey 16 окт 2011, 13:37, всего редактировалось 4 раза.
Причина: Исправлена подсветка синтаксиса

Аватара пользователя
Maximus
Супермодератор
Супермодератор
Сообщения: 1507
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Maximus » 16 окт 2011, 13:56

Код: Выделить всё

if Assigned(fn_InternetGetConnectedSta te) then
begin
Result := fn_InternetGetConnectedState(lpdwFl ags, dwReserved);
end;
Я ток понял что дожно быть fn_InternetGetConnectedState и Result := fn_InternetGetConnectedState(lpdwFlags, dwReserved);?

Код: Выделить всё

if IsConnectedToInternet(@dwConnection Types) then
И здесь?

Код: Выделить всё

if IsConnectedToInternet(@dwConnectionTypes) then

Аватара пользователя
Andrey
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Andrey » 16 окт 2011, 14:01

Да, лишние пробелы встречаются, их надо убрать(не заметил сразу)

Аватара пользователя
Maximus
Супермодератор
Супермодератор
Сообщения: 1507
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Maximus » 16 окт 2011, 14:02

Всё равно, сервер перестаёт отвечать, потом плагин отрубается.

Аватара пользователя
Andrey
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Andrey » 16 окт 2011, 14:11

Если источник проблемы известен (отсутствие соединения с интернет) и ошибка стабильно воспроизводится то я сейчас попробую сам несколько способов. Если хоть один из них будет удачным опишу его. Но это минут через 30 (срочно несколько документов напечатать надо).

Аватара пользователя
Andrey
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Andrey » 16 окт 2011, 14:25

Не воспроизвелось на виртуалке с WinXP без доступа к интернет.

Ответить