Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 6

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Продолжение темы Вопросы по Delphi (до версии 2009) - часть 5

Познаем сами, помогаем другим...
Обсуждаем вопросы, не связанные с юникоидными версиями Delphi - для этого есть соответствующая тема (см. ссылки ниже).


 
Правила топика:
    Прежде чем спрашивать:
  1. Желательно изучить вопрос, попытаться найти ответ в прилагаемых мануалах, хелпах и анализируя исходники.
  2. Выполнить поиск по топику (открыть "Версия для печати" и поискать ответ там).
  3. Применить фильтр по разделу "Прикладное программирование". Ответы на многие старые вопросы могли быть даны в отдельных темах.
  4. Продумайте вопрос. На поверхностные вопросы вы получите поверхностные ответы, или вообще ответов не получите.
  5. Желательно указывать версии используемого компилятора и операционной системы.
    Прежде чем отвечать:
  1. Если не можете помочь, не мешайте.
  2. Если уж вы отвечаете на вопрос, давайте ответ по сути.
  3. Если вы не уверены, так и говорите! Ошибочный, но авторитетно звучащий ответ хуже, чем отсутствие ответа.
  4. Задавайте дополнительные вопросы, чтобы получить больше информации.
  • Отсутствие ответа не равносильно игнорированию - иногда участники форума просто не знают ответ. Повторная посылка вопроса не приветствуется. Посты типа "неужели никто не знает ответа..." или "может мне все-таки кто-нибудь ответит" недопустимы.  
  • Все большие куски кода (более 5 строк) оформляем в тег [morе] дабы уменьшить размер поста. FAQ по тегу [morе].


    Некоторые "родственные" топики:
     
  • Вопросы по Delphi (версии 2009-2010 Weaver)
  • Вопросы по компонентам для Delphi, C++ Builder
  • Использование DevExpress
  • Вопросы по Ehlib
  • Компоненты и утилиты для Delphi/BCB/FreePascal/Lazarus - только Open Source
  • Коммерческие компоненты и утилиты для Delphi/BCB
  • кабак программистов :)
     
    См. также: Некоторые полезные ресурсы о Delphi
     
    И старайтесь, чтобы ваш код не попал сюда :)

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 05:13 19-05-2010 | Исправлено: akaGM, 02:33 15-07-2020
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Grande
    короче...
    надо делать как-то так:
    Код:
    type
      TParams = record
        Answer1, Answer2, Answer3, Answer4: PChar;
        IniString1, IniString2, IniString3, IniString4: PChar;
        Frame, IP_Address, BSCPort, MO, FaultNo: PChar;
      end;
     
    function GetCode(Parameters: TParams): PCodes;
    begin
      ShowMessage(Parameters.Answer1);
      ShowMessage(Parameters.Answer2);
      ShowMessage(Parameters.Answer3);
      ShowMessage(Parameters.Answer4);
    end;
     
    var
      Parameters: TParams;
    begin
      Parameters.Answer1 := StrNew('abc');
      Parameters.Answer2 := StrNew('123');
      Parameters.Answer3 := StrNew('98765');
      Parameters.Answer4 := StrAlloc(6);
      StrPCopy(Parameters.Answer4, '12345');
     
      GetCode(Parameters); // правильно
    //  GetCode(@Parameters); //неправильно
     
    end.

    Всего записей: 24844 | Зарегистр. 06-12-2002 | Отправлено: 12:13 20-03-2012 | Исправлено: akaGM, 12:46 20-03-2012
    alfa246



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день. Сегодня получил первое домашнее задание по Делфям.
    Задание таково: Написать программу, которая будет отправлять по интернету текст из TextBox любым способом. То есть, удаленно присылать мне текст. В голове 2 варианта либо снифер, либо php в текстовый файл на сервере.
    Простите за плохое объяснение проблемы. Жду ваших советов.

    Всего записей: 69 | Зарегистр. 23-02-2010 | Отправлено: 12:49 20-03-2012
    Man_Without_Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    alfa246
    Через веб-сервис можно быстро и просто сделать, почитай статейку:
    delphiplus.org/articles/delphi/soap_it_is_easy/index.html

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 12:55 20-03-2012 | Исправлено: Man_Without_Face, 12:57 20-03-2012
    HiDsHoT

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подробнее...

    Всего записей: 16 | Зарегистр. 20-03-2012 | Отправлено: 13:05 20-03-2012
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    HiDsHoT
    вместо
    if (Edit1.Text<>Edit2.Text)
     
    if (CompareStr(Edit1.Text, Edit2.Text) <> 0)

    Всего записей: 24844 | Зарегистр. 06-12-2002 | Отправлено: 13:54 20-03-2012
    Grande



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    akaGM
     

    Цитата:
    function GetCode(Parameters: TParams): PCodes;  
    begin  
      ShowMessage(Parameters.Answer1);  
      ShowMessage(Parameters.Answer2);  
      ShowMessage(Parameters.Answer3);  
      ShowMessage(Parameters.Answer4);  
    end;

     
    Что-то не то:
     
      ShowMessage(Parameters.Answer1); показывает фазу луны в Буркина Фасо
      ShowMessage(Parameters.Answer2); Показывает Answer1
      ShowMessage(Parameters.Answer3); Показывает Answer2
      ShowMessage(Parameters.Answer4); Показывает Answer3
     
    Answer4 пропал

    Всего записей: 588 | Зарегистр. 18-09-2003 | Отправлено: 13:56 20-03-2012 | Исправлено: Grande, 13:57 20-03-2012
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    alfa246
    Если TextBox находится на форме самой программы, то способов милион, начиная с низкоуровневого использования сокетов. Весь вопрос в том, чего ждет принимающая сторона.
     
    Grande
    А в каких версиях делфей скомпилены длл и экзе?
     
    HiDsHoT
    1. ExecSQL
    2. Значит во время выполнения этого кода значения эдитов всегда разные.

    Всего записей: 2319 | Зарегистр. 24-05-2007 | Отправлено: 14:10 20-03-2012 | Исправлено: Frodo_Torbins, 14:11 20-03-2012
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Grande
    а что ты делаешь с Ансверами _до_ вызова getcode()?
     
    showmessage вообще-то принимает string, может тебе надо делать так:
     
    showmessage(string(Params.Answer1));
    или так
    showmessage(StrPas(Params.Answer1));
     
    и вообще...
    давай весь код, я тоже хочу знать погоду в экзотических странах :)

    Всего записей: 24844 | Зарегистр. 06-12-2002 | Отправлено: 14:10 20-03-2012 | Исправлено: akaGM, 14:22 20-03-2012
    Grande



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    akaGM
    Вызывающая протграмма:

    Код:
     
      Parameters.Answer1 := StrNew(PChar('Первый'));
      Parameters.Answer2 := StrNew(PChar('ВТОРОЙ'));
      Parameters.Answer3 := StrNew(PChar('ТРЕТИЙ!!!'));
      Parameters.Answer4 := StrNew(PChar('ЧЕТВЕРТЫЙ'));
     
      GetCode(Parameters); // правильно
     

     
    В DLL:

    Код:
     
    function GetCode(Parameters: TParams): PCodes; stdcall;
    begin
      ShowMessage('ЭТО ПЕРВЫЙ ПАРАМЕТР' + #13#10 + Parameters.Answer1);
      ShowMessage('ЭТО ВТОРОЙ ПАРАМЕТР' + #13#10 + Parameters.Answer2);
      ShowMessage('ЭТО ТРЕТИЙ ПАРАМЕТР' + #13#10 + Parameters.Answer3);
      ShowMessage('ЭТО ЧЕТВЕРТЫЙ ПАРАМЕТР' + #13#10 + Parameters.Answer4);
     
      Exit;
     

     
    Что в ответ:
    'ЭТО ПЕРВЫЙ ПАРАМЕТР'
    {всякий мусор}
     
    'ЭТО ВТОРОЙ ПАРАМЕТР'
    Первый
     
    'ЭТО ТРЕТИЙ ПАРАМЕТР'
    Второй
     
    'ЭТО ЧЕТВЕРТЫЙ ПАРАМЕТР'
    Третий
     
    Такого я еще не видел
     
     

    Всего записей: 588 | Зарегистр. 18-09-2003 | Отправлено: 14:26 20-03-2012
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Grande
    я тоже...
     
    ShowMessage('ЭТО ПЕРВЫЙ ПАРАМЕТР' + #13#10 + string(Parameters.Answer1));
    или
    ShowMessage('ЭТО ПЕРВЫЙ ПАРАМЕТР' + #13#10 + StrPas(Parameters.Answer1));
     
    а так?
     
    Добавлено:
    кстати, это ничего не значит...
    ты можешь косячить совершенно в другом месте, например c перменными ptr1, ptr2
     
    var
      ptr1: pointer;
      Parameters: TParams;  
      ptr2: pointer;

    Всего записей: 24844 | Зарегистр. 06-12-2002 | Отправлено: 14:36 20-03-2012
    Grande



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    akaGM
    Та же песня.
    Причем

    Код:
     
      Parameters.Answer1 := StrNew(PChar('Первый'));  
      Parameters.Answer2 := StrNew(PChar('ВТОРОЙ'));  
      Parameters.Answer3 := StrNew(PChar('ТРЕТИЙ!!!'));  
      Parameters.Answer4 := StrNew(PChar('ЧЕТВЕРТЫЙ'));
     
      ShowMessage('ЭТО ПЕРВЫЙ ПАРАМЕТР' + #13#10 + Parameters.Answer1);  
      ShowMessage('ЭТО ВТОРОЙ ПАРАМЕТР' + #13#10 + Parameters.Answer2);  
      ShowMessage('ЭТО ТРЕТИЙ ПАРАМЕТР' + #13#10 + Parameters.Answer3);  
      ShowMessage('ЭТО ЧЕТВЕРТЫЙ ПАРАМЕТР' + #13#10 + Parameters.Answer4);
     

    Работает правильно.

    Всего записей: 588 | Зарегистр. 18-09-2003 | Отправлено: 14:57 20-03-2012
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Grande
    в смысле, без ДЛЛ? тогда давай код ДЛЛ...
     
    а на фиг тебе вообще PChar?
    ты интенсивно АПИ в ДЛЛ-ке используешь что ли? почему бы не обойтись рабоче-крестьянскими строками?
     
    Добавлено:
    ещё пропиши везде для порядка
     
    TParams = packed record
        Answer1, Answer2, Answer3, Answer4: PChar;
        IniString1, IniString2, IniString3, IniString4: PChar;
        Frame, IP_Address, BSCPort, MO, FaultNo: PChar;
      end;

    Всего записей: 24844 | Зарегистр. 06-12-2002 | Отправлено: 15:01 20-03-2012
    Grande



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    akaGM

    Код:
     
    library GetFaultCode;
     
    uses
      FastMM4, Classes, Messages, winsock2, Dialogs, SysUtils, Windows, Forms;
     
    type
      TParams = record
        Answer1, Answer2, Answer3, Answer4: PChar;
        IniString1, IniString2, IniString3, IniString4: PChar;
        Frame, IP_Address, BSCPort, MO, FaultNo: PChar;
      end;
     
    type
      TCodes = record
        Codes, Units: PChar;
      end;
     
    {$R *.res}
     
    function GetCode(Parameters: TParams): PCodes; stdcall;
    begin
      ShowMessage('ЭТО ПЕРВЫЙ ПАРАМЕТР' + #13#10 + StrPas(Parameters.Answer1));
      ShowMessage('ЭТО ПЕРВЫЙ ПАРАМЕТР' + #13#10 + Parameters.Answer1);
      ShowMessage('ЭТО ВТОРОЙ ПАРАМЕТР' + #13#10 + Parameters.Answer2);
      ShowMessage('ЭТО ТРЕТИЙ ПАРАМЕТР' + #13#10 + Parameters.Answer3);
      ShowMessage('ЭТО ЧЕТВЕРТЫЙ ПАРАМЕТР' + #13#10 + Parameters.Answer4);
     
      Exit;
    end;
     
    exports GetCode;
     
    begin
     
    end.
     


    Всего записей: 588 | Зарегистр. 18-09-2003 | Отправлено: 15:09 20-03-2012 | Исправлено: Grande, 15:10 20-03-2012
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Grande
    :)
    а собирается она той же версией (какой?), что и вызывающая (ты не ответил Frodo_Torbins)
     
    Добавлено:
    О! у меня тоже сломалась как и у тебя...
     
    я забыл stdcall в ведущей программе написать...
    function GetCode(Parameters: TParams): PCodes; stdcall; external 'GetFaultCode.dll';

    Всего записей: 24844 | Зарегистр. 06-12-2002 | Отправлено: 15:16 20-03-2012
    Grande



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Frodo_Torbins
    В D7 оба.
     
    В вызывающей проге:

    Код:
     
    type
      TGetCode = function(Parameters: TParams): PCodes; stdcall;
     

     
    В DLL

    Код:
     
      function(Parameters: TParams): TCodes; stdcall;
     

     
    После того, как по совету akaGM переделал прогу, не привел к единому типу.
    Простите, ради Бога, за потраченное время.
    Спасибо всем огромное - все заработало
    Будете в Новороссийске - напишите в личку (у нас очень вкусное пиво )

    Всего записей: 588 | Зарегистр. 18-09-2003 | Отправлено: 15:52 20-03-2012
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ни хрена не понятно, но если работает, то ну и ладно...

    Всего записей: 24844 | Зарегистр. 06-12-2002 | Отправлено: 16:29 20-03-2012
    delover

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    akaGM
    Не бурчи старый пень.
     
    Добавлено:
    Иаче взыщем сумму

    Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 21:07 20-03-2012
    Sergey1970



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Подскажите возможно ли автоматизировать процедуру "Update Localized Projects" в Delphi XE (XE2)?

    Всего записей: 55 | Зарегистр. 11-02-2003 | Отправлено: 22:29 21-03-2012
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    delover
    не 3.14зди...

    Всего записей: 24844 | Зарегистр. 06-12-2002 | Отправлено: 18:32 22-03-2012 | Исправлено: akaGM, 18:56 22-03-2012
    delover

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    akaGM
    Это по смете а то текучке 0 рублей плюс уважуха.

    Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 21:04 22-03-2012
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 6


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru