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 |
|
Разработчик
Ответов: 26173
Рейтинг: 2128
|
|||
Иван Балван писал(а): А так охото что то сделать Судя по пониманию того, что ты делаешь -- рано еще за такие схемы браться, сначала, на "кошках" потренироваться надо. Да и сам же ответил на свой вопрос Иван Балван писал(а): Я новичок и не разу схемы не переделывал такие большие и сложныеНовичку категорически не рекомендуется браться за такие вещи. Так что, сначала -- учиться, учиться и учиться, так завещал... ну сами знаете кто. |
|||
карма: 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 запускается, а с отладкой нет
![]() ![]() code_15594.txt ------------ Дoбавленo в 10.33: Гы, разобрался, вместо обычной процедуры _doEvent(<procedure>,<index>), нужно _doEvent(<procedure>,<index>,<похоже индификатор связи в схеме, для ее "утолщения">). И как тогда осуществлять отладку схем с компонентами, сделанными с помощью HiAsm ![]() |
|||
карма: 10 |
| ||
файлы: 1 | code_15594.txt [1.5KB] [559] |
Ответов: 5227
Рейтинг: 587
|
|||
Вопросик есть (если можно). Есть допустим некая API функция, как допустим результат из неё вывести на точку события
![]() |
|||
карма: 4 |
|
Разработчик
Ответов: 26173
Рейтинг: 2128
|
|||
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 |
|
Ответов: 4634
Рейтинг: 751
|
|||
Иван Балван писал(а): а что туда нужно писать что бы было норм если не секрет
Я новичок и не разу схемы не переделывал такие большие и сложные А так охото что то сделать Попробую помочь. Расскажу, как бы делал я. Рекомендации касаються пока только невизуального компонента, и, конечно, не являются пошаговой инструкцией, а просто общими соображениями. Ну и, как рекомендовал 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 |
|
Разработчик
Ответов: 26173
Рейтинг: 2128
|
|||
andrestudio, у тебя одна крупная ошибка -- ты пытаешься вызвать событие из функции ChildCallback, которая не является методом твоего класса. Для этого необходима передать указатель на твой класс в функцию обратного вызова, после чего активизировать переменную твоего класса и с помощью нее вызывать событие.
------------ Дoбавленo в 16.15: Но из твоего куска совсем непонятно, как передать функции обратного вызова указатель на твой класс ![]() |
|||
карма: 22 |
| ||
Голосовали: | andrestudio |
Ответов: 5227
Рейтинг: 587
|
|||
nesco писал(а): Для этого необходима передать указатель на твой класс в функцию обратного вызоваvar path: PChar;
onPath: THI_Event;[/quote] заработало но в рантайм вываливается, хотя тот же самый метод в точках работает
|
|||
карма: 4 |
|