Если я правильно понял, то исполняемая функция должна находиться в IC и вызываться из Dll. Это некий прообраз CallBack функции, те, функции обратного вызова
А че написал на Delphi, а не на KOL, не проще было бы, у нас же возможно тоже компилить dll без установки Delphi и его библиотек
Этот топик читают: Гость
Разработчик
Ответов: 26163
Рейтинг: 2127
|
|||
карма: 22 |
|
Ответов: 3349
Рейтинг: 233
|
|||
Чтобы вызвать событие в длл должна происходить какое либо действие.
А в другом случае я не представляю как можно такое сделать. |
|||
карма: 1 |
|
Ответов: 1429
Рейтинг: 50
|
|||
Ivann, Спасибо!, Шикарно!
Но я, не могу узнать, работает оно или нет. Поскольку, не могу скомпилировать реальную DLL. Произошла странность: В виде приложения код DLL работает, а в виде библиотеки - выдает ошибку: [Error] MyDll.dpr(53): Incompatible types: 'method pointer and regular procedure'
А необходимый midi.pas вот: code_20702.txt ------------ Дoбавленo в 08.59: В виде обычного приложения, вот это компилируется (хотя это тоже самое)
|
|||
карма: 0 |
| ||
файлы: 2 | code_20701.txt [1.2KB] [139], code_20702.txt [6.6KB] [127] |
Ответов: 3349
Рейтинг: 233
|
|||
Вроде бы procedure of object нельзя использовать в программе без очереди сообщений, но лучше спроси у nesco или у кого нибудь более грамматных чем я.
------------ Дoбавленo в 13.25: Можно попрбовать посылать указатель на процедуру из ic и уже в самом ic производить нужные действия. |
|||
карма: 1 |
|
Разработчик
Ответов: 4698
Рейтинг: 426
|
|||
Ivann писал(а): у кого нибудь более грамматных чем я.Мда, уж... точно login писал(а): Произошла странность:В виде приложения код DLL работает, а в виде библиотеки - выдает ошибку: [Error] MyDll.dpr(53): Incompatible types: 'method pointer and regular procedure' замени определение
|
|||
карма: 10 |
| ||
Голосовали: | Ivann |
Ответов: 3349
Рейтинг: 233
|
|||
Assasin писал(а): замени определениеА TEFunc здесь причем? |
|||
карма: 1 |
| ||
Голосовали: | Assasin |
Разработчик
Ответов: 4698
Рейтинг: 426
|
|||
Мда, прошу прощения, выше дана неверная правка, я немного обознался, тебе придется либо загнать
procedure DoMidiInData( const aDeviceIndex: integer; const aStatus, aData1, aData2: byte ); в класс, либо править midi.pas P.S: предпочтительнее "в классобъект" |
|||
карма: 10 |
|
Ответов: 3349
Рейтинг: 233
|
|||
login, а зачем ты все это пихаеш в dll?
|
|||
карма: 1 |
|
Ответов: 1429
Рейтинг: 50
|
|||
Ivann, да, этот midi.pas можно и не пихать в DLL. А просто взять и вставить в IC, но я не знаю delphi на столько, чтобы подогонять его под HiAsm.
Он использует какие-то там ресурсы Delphi7. |
|||
карма: 0 |
|
Ответов: 3349
Рейтинг: 233
|
|||
login писал(а): Он использует какие-то там ресурсы Delphi7.Раньше у товарища Assasin-a была подпись Главное понять код а не тупо списать из источника. Или как-то так Ну вот сначала бы посмотрел что он использует, и как работает, а только потом бы делал. Сильной привязанности к vcl нет, так что можно портировать без особых усилий; |
|||
карма: 1 |
|
Ответов: 1429
Рейтинг: 50
|
|||
Ivann, я делал такую попытку, не получилось у меня. И есть еще модули, которые гораздо больше этого, я их не осилю "переработать", и поэтому хочу понимать как работать с DLL. Но мысль мне понятна, буду разбираться с языком.
------------ Дoбавленo в 08.04: private fDevices: TStringList; Чем можно заменить в IC формат TStringList? Ато он пишет, что не знает такого. |
|||
карма: 0 |
|
Разработчик
Ответов: 26163
Рейтинг: 2127
|
|||
login писал(а): Чем можно заменить в IC формат TStringList?Смотри код штатного компонента StrList, переменная FList |
|||
карма: 22 |
|
Ответов: 1429
Рейтинг: 50
|
|||
nesco, спасибо, нашел работает.
Скажите, а как вообще надо мыслить, перерабатывая midi.pas в ic код, когда встречаеш вот такое: begin fDevices := TStringLIst.create; end; TStringLIst - в Delphi7 это обьект, который понимает команды (.create - это команда), и в коде подобных штук много. А в IC такого понятия нет, хотябы на словах скажите, в какую сторону думать, чтобы такое заменить? |
|||
карма: 0 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
login писал(а): Все гениальное - просто, но не все гениальное. (c) Login |
|||
карма: 25 |
|
Ответов: 1429
Рейтинг: 50
|
|||
Не могу сформировать план действий, что нужно делать, чтобы перерабатывать код под IC.
Можете, коротко, просто на словах, сказать, что надо делать? При попытке компилировать в IC midi.pas возникает аж 20 ошибок. В инете полно уроков по Delphi7 где советуют всякое: "Devices := Form1.create" то-есть уроков по самой среде борланда. И откуда, вообще можно получить понимание того, почему именно: Assasin писал(а): тебе придется либо загнатьprocedure DoMidiInData( const aDeviceIndex: integer; const aStatus, aData1, aData2: byte ); в класс, либо править midi.pas P.S: предпочтительнее "в классобъект" Я понимаю как устроен код проэкта, что обьявлены процедуры, а ниже их реализация и все такое, и они каждый в своем классе сидят. Но я, напрочь, не понимаю как программа! работает! Количество взаимосвязей между процедурами, может доходить до нескольких вложений, умножаем это на количество процедур в проэкте, и получаем полнейший дурдом бесконечных переходов. Хождение глазами по этим переходам ничего не дает, поскольку к концу перехода забывается его начало, и забываются переходы других функций. Негде получить целостную информацию о типах и о последовательности работы чужого, готового проэкта. Что почитать посоветуете? ------------ Дoбавленo в 10.34: Tad, я этого не знал, в голове перед телеком неделю назад придумалось. |
|||
карма: 0 |
| ||
Голосовали: | olDjeka |