|
Вопрос # 3 032/ вопрос открыт / |
|
Приветствую, уважаемые эксперты!
Не могу понять почему компилятор Delphi 2009 нехочет воспринимать код.
Есть объекты:
TCurlBase = class ( TComponent )
TCurl = class ( TCurlBase )
TCurlMulti = class ( TCurlBase )
В их конструкторах используется процедура FAIL, использование которой вызывает ошибку компилятора:
Error: E2078 Procedure FAIL only allowed in object constructor
constructor tCurl.Create(aOwner:tComponent);
begin
inherited Create(aOwner);
fCurl:=curl_easy_init;
if ( fCurl = nil ) then begin
fCurlResult:=CURLE_FAILED_INIT;
Self.Destroy;
Self:=nil;
FAIL; /* ошибка здесь */
end else fCurlResult:=CURLE_OK;
...
end;
constructor tCurlMulti.Create(aOwner:tComponent);
begin
inherited Create(aOwner);
fMultiHandle:=curl_multi_init();
if ( fMultiHandle = nil ) then FAIL; /* ошибка здесь */
...
end;
В прикрепленном архиве находится исходный текст модуля + примеры работы.
Подскажите в чем проблема?
К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)
 |
Вопрос задал: Лёга Е.Н. (статус: Посетитель)
Вопрос отправлен: 23 июля 2009, 20:18
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 5; последнее сообщение — 23 июля 2009, 23:39; участников в обсуждении: 4.
|
Егор (статус: 10-ый класс), 23 июля 2009, 21:22 [#1]:
не понял
constructor tCurl.Create(aOwner:tComponent);
begin
...
Self.Destroy;
Self:=nil;
FAIL; /* ошибка здесь */
...
end
это вы мало того, что в конструкторе ещё и деструктор вызываете, а затем Nil указателю присваиваете (и на это компилятор не ругается?), так ещё и потом, после того, как объект удалили - вызываете метод этого, уже удалённого объекта?!
хм... оригинально...

или я чего-то не понял?
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
Death_Master (статус: Посетитель), 23 июля 2009, 21:24 [#2]:
Если вопрос почему не работает компонент- могу ответить что его писали и тестировали под старыми версиями делфи...
Цитата с оффсайта:
CurlPas was developed and tested on the following systems:
* FreePascal-2.0 for Linux-i386 on SuSE-9.2.
* Kylix-3.0 Open Edition on SuSE-9.2.
* FreePascal-2.0 for MS-Windows on Win98.
* Delphi-6.0 Personal Edition on Win98.
In addition, the CurlPas components are also compatible with the Lazarus LCL.
Тоесть в делфи 2009 он работать и не должен...
Если есть желание- можно переписать под свежие версии....
На сайте curl есть API для си
Обычно захожу по ночам... (60-70%)
Если нужно что-то написать, то беру оборудованием, деньгими и пивом(при личной встрече)...
P.S. Помогаю и рассказываю бесплатно ^_^.....Nyaaa!
|
|
Лёга Е.Н. (статус: Посетитель), 23 июля 2009, 22:06 [#3]:
В том-то и дело, что мне он нужен для 2009-й Дельфи.
|
|
Вадим К (статус: Академик), 23 июля 2009, 23:03 [#4]:
За такой код надо отрывать ручки и ножки. Он вообще не должен работать. А то, что он заработал, это просто повезло. Или используются недокументированные особенности компилятора.
В добавок код пестрит include'ами. такой стиль уже давно не приветствуется в делфи - слишком сложно удерживать такой код в компилируемом состоянии.
Специально пересмотрел код - в нем сколько есть идиотизмов - иначе не назовешь. Например
SetLength(Hdr, StrLen(@Hdr[1])); С логической точки зрения эта функция строка - фикция. Так как она устанавливает длину строки равную ей же самой. На самом деле используется тот факт, что делфовская строка может содержать символы #0 и они не будут её концом... и усекаем строку.
код вида
TmpStrm:=fopen( filename, 'w'#0 );
здесь вообще плакать нужно... код то вообще то рабочий. Но как!
Есть много участков кода, который не будет работать под 2009 делфи. (причина - юникод).
Мой вердикт - выбрость этот код и использовать например synapse.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Лёга Е.Н. (статус: Посетитель), 23 июля 2009, 23:39 [#5]:
Под 2007-й Дельфи весь код откомпилился без ошибок, запустился и сделал все, что требовалось.
Спасибо всем за беспокойство!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|