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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    andrey777k



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем спасибо за помощь
    Frodo_Torbins
    ShIvADeSt
    Cryogen2003
    ShIvADeSt
    Frodo_Torbins
    ShIvADeSt
    И унижение  
    psa1974
     

    Всего записей: 27 | Зарегистр. 19-02-2011 | Отправлено: 14:09 25-02-2011
    svs123456789

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

    Цитата:
    Был помнится такой компилятор, который паскаль-код в С++ перегонял, а потом с помощью GCC его компилял. Но вообще код на делфи это ведь не только сплошные конструкции языка, это еще и обращения к RTL и VCL. Их ни в шарпе ни в джаве нету.  

    Frodo_Torbins
    ну собственно я и не рассчитывал на VCL под .NET?
    просто есть алгебра на несколько страниц и хотелось бы автоматически перевести синтаксис на другой язык...
    когда то мелькал конвертер толи из паскаля в си
     

    psa1974

    Цитата:
    Программирование - это большой труд, это куча потраченного времени и масса информации, с которой надо разбиратся, нахрапом это дело не возьмешь. Это только в сказке программирование можно выучить за 21 день. Думаю, тебе стоит подумать о других направлениях самореализации. Это просто совет.

    если тебе так уж тяжело отвечать, то ведь персонально тебя об этом никто не просит?  
    просто не утруждайся на каждый вопрос писать бесполезные свои ответы - это просто совет!
    или тебя кто то заставляет сидеть на этом форуме и флейм разводить о направлениях самореализации?


    Всего записей: 2934 | Зарегистр. 10-04-2003 | Отправлено: 14:21 25-02-2011 | Исправлено: svs123456789, 15:39 25-02-2011
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    svs123456789
    Подборку конверторов можно найти на торри: http://www.torry.net/pages.php?id=1518
    А с этим GNU Pascal что то не понятно. В документации сказано, что он использует бекэнд gcc. Наверно имеется в виду асемблер. К сожалению проверить нет возможности.
    Еще вариант использовать Delphi Prism, а потом .NET Reflector-ом получить C#-код.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 15:14 25-02-2011
    greenpc

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Frodo_Torbins
    ShIvADeSt
    Cryogen2003
    psa1974
    Ну что Вы на человека накинулись. Вспомните какими были сами в 14 лет
    Идея ведь интересная/геморойная - распознование речи
    andrey777k
    а Вас никто не унижает  - просто дают совет нажать F1 и почитать help, если нет возможности/желания читать книги.
    а по теме _http://it.kgsu.ru/Pascal/pas0061.html

    Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 15:41 25-02-2011
    XOBAH

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте! Помогите пожалуйста!
    Delphi начал изучать с полмесяца назад, а мне сегодня срочно понадобилось следующее:
     
    Создал программу, она использует два внешних файла File.exe и File2.max. Их общий размер примерно полтора мегабайта
    И мне надо чтобы моя программа была одним exe файлом, а эти два были внутри нее. Эти файлы нужны мне чтобы скопировать их из программы. Как это реализовать?
     
    Вопрос снят

    Всего записей: 19 | Зарегистр. 04-12-2010 | Отправлено: 16:05 10-03-2011 | Исправлено: XOBAH, 18:57 10-03-2011
    Wadim51

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте.  
    Извиняюсь, если данный вопрос уже измусолен, искал, всю ночь весь интернет облазил, и данный форум, но все-таки пришлось спросить. Опыта в программировании у меня можно сказать нет, но это не суть думаю важно. Интересует не конкретные примеры с кодом, а хоть в какую сторону копать, и как по идее это может быть сделано.  
    В данный раздел написал, потому что пример реализации который меня интересует сделан именно в программе на Dekphi.  
    Множите подсказать, каким образом в программах полуавтоматического заполнения HTML форм на странице туда, в эту самую загруженную страницу внедряются элементы выбора из списка того, что в водить. На примере есть такая многим известная программа Allsubminner там есть полуавтоматическая регистрация. Когда пользователь загружает страницу в окно программы, возле каждого поля ввода появляется выпадающий список. В выпадающем списке перечислены заранее заполненные поля. Когда пользователь выбирает нужное название поля в каждом из выпадающих списков, то текст введенный в это поле автоматически заносится в расположенное рядом поле ввода. Еще есть несколько подобных программ, где загружается страница, на страницы внедряются различные элементы. Не могу понять, как это делается, потому что например Allsubminner если нажать правой кнопкой на просмотр кода, то код там неизменный. Еще есть плагин для Firefox который тоже внедряет нечто подобное на страницы, но он изменяет код. Нашел пока только функцию JavaScript   innerHTML которая позволяет что-то внедрять.  
    Если кто-то знает каким образом сделано внедрение выпадающих списков в вышеупомянутой программе, иди любом из её аналогов, пожалуйста напишите, в какую строну копать. Пожалуйста, напишите хоть какие запросы в поиск вводить если вопрос тупой.
    Заранее всем СПАСИБО.

    Всего записей: 65 | Зарегистр. 21-12-2009 | Отправлено: 08:24 14-03-2011
    Man_Without_Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день. В Dll есть рекорд:
    Подробнее...
    В exe описана такая же структура, загружаю Dll:
    Подробнее...
    Вопрос: как получить значения CenterDest и ObjectDest?
    cxCurrencyEdit1.value := ?

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 13:31 14-03-2011
    greenpc

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man_Without_Face
    может так
    var
      rData : PReceiveData;
    ...
    OnReceiveData(rData);
    showmessage(inttostr(rData^.CenterSource));
    пс а откуда в длл PSendData? там же описан TReceiveData  
     

    Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 14:55 14-03-2011 | Исправлено: greenpc, 15:05 14-03-2011
    Man_Without_Face



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

    Цитата:
    OnReceiveData(rData);

    av по адресу 04822614

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 15:06 14-03-2011
    greenpc

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

    Код:
    procedure TForm1.btn1Click(Sender: TObject);
    var
      vData : TReceiveData;
      pvdata : PReceiveData;
    begin
      pvdata :=@vData;
      OnReceiveData(Pointer(pvdata));
      ShowMessage(IntToStr(pvdata^.CenterDest));
    end;
     

    dll
    Код:
     
    type
    PReceiveData = ^TReceiveData;
        TReceiveData = record
          CenterDest: Word;
          ObjectDest: Word;
          Data: Pointer;
        end;
    function OnReceiveData(var Data: Pointer): Boolean; stdcall;
    var
      vData : TReceiveData;
    begin
      vData.CenterDest := 2200;
      vData.ObjectDest := 39;
      Data := @vData;
      Result := true;
    end;
     
     

    Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 15:46 14-03-2011 | Исправлено: greenpc, 15:49 14-03-2011
    Man_Without_Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    greenpc
    Данные не те получаю:  
    CenterDest = 62716
    ObjectDest = 18

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 16:06 14-03-2011
    greenpc

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man_Without_Face
    у меня все ОК
    возможно у Вас смотрит не на тот указатель (структуру)
    воспроизведите мой код под ковриком #

    Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 16:16 14-03-2011 | Исправлено: greenpc, 16:24 14-03-2011
    Man_Without_Face



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

    Цитата:
    возможно у Вас смотрит не на тот указатель (структуру)  

    да вроде все нормально.

    Цитата:
    воспроизведите мой код под ковриком #

    стесняюсь спросить, а это как?
     

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 16:53 14-03-2011
    greenpc

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man_Without_Face
    кнопочка "Редактировать" на моем сообщении

    Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 17:01 14-03-2011
    Man_Without_Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    greenpc
    Тоже самое. Функцию правильно вызываю?
     
    @OnReceiveData := GetProcAddress(ClientHandle, 'OnReceiveData');

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 17:10 14-03-2011
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Wadim51
    Попробуйте так: http://delphikingdom.com/asp/viewitem.asp?catalogid=1410
     
    Man_Without_Face
    У вас отсутствует ключевое слово packed в описании записи. В этом случае работоспособность любого подобного кода будет зависеть от настроек комилятора. Второй важный момент это менеджер памяти: http://www.gunsmoker.ru/2009/01/blog-post.html Кстати в этом же блоге есть хорошая статья про работу с указателями если вдруг возникнут вопросы.
     
    greenpc
    В вашем коде возможен AV т к записи являются автоматически управляемым типом данных.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 21:02 14-03-2011
    greenpc

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man_Without_Face
    вызываете правильно
    только я бы добавил

    Код:
     
    procedure TfrmMain.FormShow(Sender: TObject);  
    type
        TOnReceiveData  = function (var Data: Pointer): Boolean; stdcall;  
    var
      OnReceiveData : TOnReceiveData ;
    ClientHandle : THandle;
    begin  
      ClientHandle := LoadLibrary('bClient.dll');  
    try
      if ClientHandle <32 then  
        begin  
          ShowMessage('Ошибка при загрузке bClient.dll');  
          WriteLog('Ошибка при загрузке bClient.dll');  
        end  
      else  
        WriteLog('bClient.dll загружена');  
     
      @OnReceiveData := GetProcAddress(ClientHandle, 'OnReceiveData');  
    if @OnReceiveData <> nil then OnReceiveData (............);
    ....
    finally
    FreeLibrary(ClientHandle);
    end;
     
    end;  
     
     

     
    Frodo_Torbins
    позвольте не согласиться. здесь идет разговор о передаче указателя, а не текста. вот чем говорит хелп дельфи, если Вы это имеете ввиду

    Цитата:
    { Important note about DLL memory management: ShareMem must be the
      first unit in your library's USES clause AND your project's (select
      Project-View Source) USES clause if your DLL exports any procedures or
      functions that pass strings as parameters or function results. This
      applies to all strings passed to and from your DLL--even those that
      are nested in records and classes. ShareMem is the interface unit to
      the BORLNDMM.DLL shared memory manager, which must be deployed along
      with your DLL. To avoid using BORLNDMM.DLL, pass string information
      using PChar or ShortString parameters. }


    Цитата:
    У вас отсутствует ключевое слово packed в описании записи

    с этим полностью согласен.
    PS: все тестировалось и работало на D7  
    PS2: а может тогда проще передать структуру в качестве параметра
    а не указатель?

    Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 09:28 15-03-2011 | Исправлено: greenpc, 09:45 15-03-2011
    Man_Without_Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Frodo_Torbins
    Спасибо, статьи интересные.
     
    Поставил packed в описании записей в exe и в Dll, прописал в uses
    на первом месте ShareMem и там и там. Но значения все равно не те получаю...
     
     
    Добавлено:
    greenpc
    ок, спасибо. Использую Delphi 2009.

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 10:04 15-03-2011
    greenpc

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man_Without_Face
    тогда еще раз Ваши модули в студию

    Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 11:40 15-03-2011
    Man_Without_Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    greenpc
    Frodo_Torbins
    Всем спасибо, вопрос решил:
    Dll:
      PReceiveData(Data)^.CenterSource := 2200;
      PReceiveData(Data)^.ObjectSource := 39;
      Result := true;
    exe:
    procedure TfrmMain.cxButton1Click(Sender: TObject);
    var
      vData : PReceiveData;
    begin
      OnReceiveData(@vData);
      cxCurrencyEdit1.Value := vData.CenterSource;
      cxCurrencyEdit2.Value := vData.ObjectSource;
    end;
    Я так понимаю, после отработки функции в dll,
    vData уничтожалась, поэтому в exe брались другие значения.

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 11:55 15-03-2011
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 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