Форум: "Основная";
Текущий архив: 2003.03.20;
Скачать: [xml.tar.bz2];
ВнизРазница между обычным и консольным приложением Найти похожие ветки
← →
ДмирийК (2003-03-06 17:46) [0]Добрый день!
У меня уже несколько раз было такое. Пишешь проект с формами. Он работает. Переносишь его в консольный проект, не работает. В чем может быть дело?
← →
Anatoly Podgoretsky (2003-03-06 17:52) [1]Неправильно переносишь больше ничего быть не может.
← →
Smashich (2003-03-06 17:53) [2]дело в том что несколько разные подходы к консольным приложениям....
Console applications are 32-bit programs that run without a graphical interface!!! можно конечно креатить формы - но уже с помощью API, а не VCL....
← →
vuk (2003-03-06 18:21) [3]to Smashich:
>можно конечно креатить формы - но уже с помощью API, а не
>VCL....
Это Вам кто сказал? Киньте в него чего-нибудь тяжелое-корявое. В приложении с формами .dpr пишем {$APPTYPE CONSOLE} и получаем приложение с формами и консолью одновременно.
← →
ДмирийК (2003-03-06 18:26) [4]Я в этих проектах формами вообще не пользуюсь
← →
Anatoly Podgoretsky (2003-03-06 18:31) [5]Все может быть.
← →
Smashich (2003-03-06 18:31) [6]2 vuk © (06.03.03 18:21) неправильно выразился и получил;) заслуженно!
← →
Smashich (2003-03-06 18:32) [7]>ДмирийК (06.03.03 17:46)Добрый день!
.... Пишешь проект с формами......
>ДмирийК (06.03.03 18:26)Я в этих проектах формами вообще не пользуюсь
это как?
← →
ДмирийК (2003-03-06 18:40) [8]Я имею ввиду, что когда начинаю проект, то использую проект по умолчанию с формой. Вешаю на нее кнопку и по ней запускаюсь. Больше моя программа ни с этой ни с к какой другой формой дел не имеет. Потом создаю новый консольный проект полностью переношу код в него, заменяя обработчик OnClick на консольный begin end.
После этого самые разнообразные начинаются чудеса. Я уже боюсь на Delphi консольные проги программировать.
← →
Smashich (2003-03-06 18:42) [9]2 ДмирийК (06.03.03 18:40)
например?
← →
ДмирийК (2003-03-06 18:47) [10]Ну, например, у меня есть проет по работе с компаунд файлами. Одна функция создает и заполняет его. Так в первоначальном проете все работает. А в консольном файл создается, вроде как заполняется, но после окончания программы оказывается битым.
← →
vuk (2003-03-06 18:53) [11]Про всякие CoInitialize, надеюсь не забываете?
← →
ДмирийК (2003-03-06 19:00) [12]Про него забыл. А есть ли где список таких отличий этив двух типов проектов?
← →
Anatoly Podgoretsky (2003-03-06 19:06) [13]А ты точно уверен, что у тебя не работает?
← →
ДмирийК (2003-03-06 19:09) [14]Абсолютно, я даже обратно в новый проект с формой перетащил из консольного, заработало.
← →
Anatoly Podgoretsky (2003-03-06 19:17) [15]Не ты наверно нас обманываешь
← →
ДмирийК (2003-03-06 19:19) [16]Больше мне делать нечего :)
← →
Anatoly Podgoretsky (2003-03-06 19:22) [17]Не верю
← →
vuk (2003-03-06 19:26) [18]>А есть ли где список таких отличий этив двух типов проектов?
Там все отличия - в флагах, которые устанавливаются компилятором в заголовке .exe. Этим и управляет директива $APPTYPE.
← →
ДмирийК (2003-03-06 20:28) [19]Вот пример, попробуйте.
procedure TForm1.Button1Click(Sender: TObject);
var
OutStorageб OutS: IStorage;
begin
StgCreateDocfile("1.cf", STGM_CREATE or STGM_READWRITE or STGM_DIRECT or STGM_SHARE_EXCLUSIVE, 0, OutStorage);
OutStorage.CreateStorage("123",STGM_CREATE or STGM_READWRITE or STGM_DIRECT or STGM_SHARE_EXCLUSIVE,0,0,OutS);
end;
← →
Anatoly Podgoretsky (2003-03-06 20:37) [20]Это не похоже на консольное приложение
← →
ДмирийК (2003-03-06 20:40) [21]В консольном приложении код
var
OutStorageб OutS: IStorage;
begin
StgCreateDocfile("1.cf", STGM_CREATE or STGM_READWRITE or STGM_DIRECT or STGM_SHARE_EXCLUSIVE, 0, OutStorage);
OutStorage.CreateStorage("123",STGM_CREATE or STGM_READWRITE or STGM_DIRECT or STGM_SHARE_EXCLUSIVE,0,0,OutS);
end.
не создаст Storage "123"!!!
← →
vuk (2003-03-06 20:42) [22]Если Commit сказать, то все создает.
← →
vuk (2003-03-06 20:44) [23]И вообще:
StgCreateDocfile("1.cf", STGM_CREATE or STGM_READWRITE or STGM_DIRECT or STGM_SHARE_EXCLUSIVE, 0, OutStorage);
OutStorage.CreateStorage("123",STGM_CREATE or STGM_READWRITE or STGM_DIRECT or STGM_SHARE_EXCLUSIVE,0,0,OutS);
OutS := nil;
OutStorage := nil;
Даже без Commit все правильно.
← →
ДмирийК (2003-03-06 20:48) [24]Действительно. Это мое первое приложение по compound файлам. Но в проете с окнами у меня все работало без Commit. То есть разница всеравно есть.
← →
vuk (2003-03-06 20:52) [25]Нет никакой разницы! Посмотрите сюда, и вспомните особенности работы с интерфейсными ссылками.
procedure DoIt;
var
OutStorage, OutS: IStorage;
begin
StgCreateDocfile("1.cf", STGM_CREATE or STGM_READWRITE or STGM_DIRECT or STGM_SHARE_EXCLUSIVE, 0, OutStorage);
OutStorage.CreateStorage("123",STGM_CREATE or STGM_READWRITE or STGM_DIRECT or STGM_SHARE_EXCLUSIVE,0,0,OutS);
end;
begin
DoIt;
end.
← →
Anatoly Podgoretsky (2003-03-06 20:52) [26]Ну не так страшно, потребовалось всего лишь три часа на получение от тебя неработающего кода и четыре минуты на ответ от vuk © (06.03.03 20:44), две минуты с Commit
Иногда бывает и хуже, требуется несколько дней на получение.
← →
ДмирийК (2003-03-06 20:55) [27]Хорошо, сдаюсь. Я программирую от случая к случаю, так что насчет особенности не понял. Разъясните если не трудно.
← →
Anatoly Podgoretsky (2003-03-06 21:41) [28]Вот это будет выполнено, когда выйдешь за пределы видимости, то есть когда покинешь процедуру DoIt, у тебя ее нет.
OutS := nil;
OutStorage := nil;
← →
vuk (2003-03-06 22:14) [29]Кстати о птичках. Почему этого не происходит, если переменные объявлены глобально в основном модуле программы, я так и не понял...
← →
Anatoly Podgoretsky (2003-03-07 01:45) [30]Потому что видимость будет потеряна только при выходе (закрытии) программы
← →
vuk (2003-03-07 10:39) [31]>Потому что видимость будет потеряна только при выходе
>(закрытии) программы
Я в курсе, видимость будет потеряна, это точно. Но вот интерфейсные ссылки-то не обнуляются. Вчера специально проверял(D6). Компилятор просто не вставляет код финализации интерфейсных ссылок. И, кстати, если бы этот код вставлялся, то у автора вопроса не возникло бы проблем.
← →
vuk (2003-03-07 14:51) [32]Так что народ думает по этому поводу? Баг компилятора?
← →
Anatoly Podgoretsky (2003-03-07 14:56) [33]Может оно и должно, ведь приложение закрывается.
Попробую это вынести в отдельную процедуру DoIt
← →
Димон1 (2003-03-07 15:00) [34]Удалено модератором
Примечание: Задай СВОЙ вопрос в отдельной своей ветке
← →
vuk (2003-03-07 15:01) [35]>Может оно и должно, ведь приложение закрывается.
Должно не вставлять код финализации? Но тогда это противоречит концепции интерфейсных ссылок. Если интерфейсная ссылка будет ссылаться на объект порожденный внутри программы, то это ничего страшного, но если это какой-то внешний COM объект, то последствия могут быть самые неприятные...
← →
DiamondShark (2003-03-07 18:28) [36]
> vuk © (07.03.03 15:01)
> но если это какой-то внешний COM объект, то последствия
> могут быть самые неприятные...
Если процес завершается не аварийно не будет никаких последствий.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.03.20;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.007 c