Tad писал(а):
Судя по тому, что ты наваял, очень долго рассказывать "как нада". Этот топик читают: Гость
Ответов: 109
Рейтинг: 4
|
|||
готово смотри что там не правельно)) 2 схема в том сообщение |
|||
карма: 0 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
uses
как только эти все USES будут в наличии в HiAsm - так и заработает Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, XPMan, ICQClient, ICQWorks, StdCtrls, Buttons, ExtCtrls; |
|||
карма: 25 |
|
Ответов: 109
Рейтинг: 4
|
|||
а что туда нужно писать что бы было норм если не секрет
Я новичок и не разу схемы не переделывал такие большие и сложные А так охото что то сделать ) |
|||
карма: 0 |
|
Разработчик
Ответов: 26155
Рейтинг: 2127
|
|||
Иван Балван писал(а): А так охото что то сделать Судя по пониманию того, что ты делаешь -- рано еще за такие схемы браться, сначала, на "кошках" потренироваться надо. Да и сам же ответил на свой вопрос Иван Балван писал(а): Я новичок и не разу схемы не переделывал такие большие и сложныеНовичку категорически не рекомендуется браться за такие вещи. Так что, сначала -- учиться, учиться и учиться, так завещал... ну сами знаете кто. |
|||
карма: 22 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Tad писал(а): Судя по тому, что ты наваял, очень долго рассказывать "как нада".для этого вывода одного ника достаточно... |
|||
карма: 27 |
|
Ответов: 109
Рейтинг: 4
|
|||
Дайте 2 схемы не переведенную и переведенную на хиасм
Для ТОГО ЧТО БЫ ПОНЯТЬ ЧТО К ЧЕМУ |
|||
карма: 0 |
|
Разработчик
Ответов: 4698
Рейтинг: 426
|
|||
Возможно не в ту тему:
Я почитал статейки из википедии по созданию DLL ручками, собрал парочку с помощью нашего любимого HiAsm(программа запуска для компилятора), прикрутил к своим прогам с помощью IC(одним словом попрактиковался), все работает! НО, в HiAsmDLL возможно вызывать события(например DLL := таймер.onTimer->DLL.onTmr, а в программе какие-то действия происходят), чтение исходников компонентов не помогло, если не трудно можно описать какие функции отвечают за это, описать процесс(кратко хотя бы) + ко всему маленький пример программы с IC(для управления библиотекой) |
|||
карма: 10 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
для этого нужно в DLL передавать указатель на метод класса из IC и далее уже использовать его в теле библиотеки.
|
|||
карма: 27 |
|
Разработчик
Ответов: 4698
Рейтинг: 426
|
|||
А вот я что-то не понял, почему IC запускается, а с отладкой нет Такая же проблема и с компонентами, сделанными с помощью средств HiAsm
code_15594.txt ------------ Дoбавленo в 10.33: Гы, разобрался, вместо обычной процедуры _doEvent(<procedure>,<index>), нужно _doEvent(<procedure>,<index>,<похоже индификатор связи в схеме, для ее "утолщения">). И как тогда осуществлять отладку схем с компонентами, сделанными с помощью HiAsm |
|||
карма: 10 |
| ||
файлы: 1 | code_15594.txt [1.5KB] [545] |
Ответов: 5227
Рейтинг: 587
|
|||
Вопросик есть (если можно). Есть допустим некая API функция, как допустим результат из неё вывести на точку события
|
|||
карма: 4 |
|
Разработчик
Ответов: 26155
Рейтинг: 2127
|
|||
andrestudio писал(а): Есть допустим некая API функция, как допустим результат из неё вывести на точку события Создаешь точку события тип THI_Event и отдаешь ей результат своей функции, например --
|
|||
карма: 22 |
|
Ответов: 5227
Рейтинг: 587
|
|||
nesco, в принципе так и делаю, но получаю такое
C:\Program Files\HiAsm v4 build 175\Elements\delphi\code\hiInlineCode_8BEB294.pas(63) Error: Undeclared identifier: 'onPath'
C:\Program Files\HiAsm v4 build 175\Elements\delphi\code\hiInlineCode_8BEB294.pas(63) Error: There is no overloaded version of '_hi_OnEvent' that can be called with these arguments из этого кода
|
|||
карма: 4 |
|
Ответов: 4630
Рейтинг: 749
|
|||
Иван Балван писал(а): а что туда нужно писать что бы было норм если не секрет
Я новичок и не разу схемы не переделывал такие большие и сложные А так охото что то сделать Попробую помочь. Расскажу, как бы делал я. Рекомендации касаються пока только невизуального компонента, и, конечно, не являются пошаговой инструкцией, а просто общими соображениями. Ну и, как рекомендовал nesco, вначале нужно потренироваться на небольших схемах. Я так понял, ты хочешь сделать компонент для работы с ICQ. Смотрим на блок uses:
Сразу должен обратить внимание, какие используются стандартные модули, а какие - нестандартные (ICQClient, ICQWorks). Переделывать стандартные модули, чтобы они работали в HiAsm - занятие абсолютно безполезное (придется переделать всю VCL - а это даже представить страшно), да и это в большинстве случаев не нужно. Думаю, в данном случае тебе нужно разобраться в работе компонента TICQClient, который, подозреваю, и реализован в модулях ICQClient, ICQWorks. Предполагается, что ты знаком з понятием "класс" и как с ним работать. Если нет - тогда сначала усвой работу с классами, а также принцыпы работы компонентов Delphi. Открываешь модуль, в котором обьявлен TICQClient и разбираешся в его методах и свойствах: для чего они предназначаются, какой из них отвечает за визуальное отображение компонента на форме (эти пока лучше не трогать), а какой - за основную функциональность (прием, отправка сообщений и т. п.). Смотришь реализацию этих методов и отмечаешь какие в них стандартные функции используються (API, для работы со строками, числами, датой и т. п. - т.е. те, которые уже имеются в KOL или котрые можно найти в VCL и безболезненно портировать в HiAsm). Основная идея - чтобы отделить модули ICQClient, ICQWorks от модулей VCL, чтобы в uses остались только Windows, ICQClient, ICQWorks. Затем пытаешься отделить невизуальную часть от визуальной. Например, я так понимаю, ICQClient должен иметь методы (точки) типа "doAutorize" "doSent" и событие "onMessage". Для этого ему визуального ничего не нужно. При поступлении нового сообщения точка onMessage выдает его в поток, а ты уже можешь добавить его, например, в стандартный список. Поэтому визульные методы класса TICQClient нужно просмотреть на наличие каких-то функций, не относящихся к отображению компонента на форме, но имеющих значение для функционирования компонента. Пытаешься избавится от стандартных модулей, прописанных в uses модулей ICQClient и ICQWorks. Потом делаешь собственный класс, который содержит только функциональные методы (интерфейсные отбрасываешь). Конечно, новый класс ты уже не сможешь тестировать, просто бросив компонент на форму; создавать экземпляр нужно будет вручную (aaa:=TMyICQClient.Create(...);). Всё это, конечно, будет сопровождаться шишками на лбу в виде ошибок компиляции, перелопачивания вдоль и поперек модулей ICQClient и ICQWorks и т.п. Созданный класс обьявляется в новом модуле, в uses которого прописываются только Windows, ICQClient, ICQWorks. Затем код из ICQClient, ICQWorks перносится в твой новый модуль. В конце у тебя должен получится один модуль (например, ICQClient.pas) в котором обьявлен только один готовый класс (например, TMyICQClient) и требуемые API-функции, которые остались после избавления от стандартных модулей. Если ты сможешь на этом этапе получить работающий класс, тогда портирование под HiAsm не будет сложным. |
|||
карма: 26 |
|
Разработчик
Ответов: 26155
Рейтинг: 2127
|
|||
andrestudio, у тебя одна крупная ошибка -- ты пытаешься вызвать событие из функции ChildCallback, которая не является методом твоего класса. Для этого необходима передать указатель на твой класс в функцию обратного вызова, после чего активизировать переменную твоего класса и с помощью нее вызывать событие.
------------ Дoбавленo в 16.15: Но из твоего куска совсем непонятно, как передать функции обратного вызова указатель на твой класс Можно было сделать глобальной переменной, но тут требуется наличие только одного экземпляра класса, если их будет несколько, то работать будет только последний инициализированный |
|||
карма: 22 |
| ||
Голосовали: | andrestudio |
Ответов: 5227
Рейтинг: 587
|
|||
nesco писал(а): Для этого необходима передать указатель на твой класс в функцию обратного вызоваvar path: PChar;
onPath: THI_Event;[/quote] заработало но в рантайм вываливается, хотя тот же самый метод в точках работает
|
|||
карма: 4 |
|