Вверх ↑
Этот топик читают: Гость
Ответов: 2
Рейтинг: 0
#1: 2009-02-04 16:45:57 ЛС | профиль | цитата
В поставке hiasm 3.68 есть пример создания Windows dll. Мне кажется очень скудным и не совсем понятным.
Собственно что мне надо - вернуть одно значение(жестко прописано в самой dll), а другое (передаваемое по ссылке из программы) поменять на другое.
карма: -1

0
Ответов: 3514
Рейтинг: 184
#2: 2009-02-04 17:00:41 ЛС | профиль | цитата
exe
code_11696.txt

dll
code_11697.txt
(не забудьте указать имя dll)

Я надеюсь вот так вот (визуально) понятно что и как происходит?
карма: 0
1
файлы: 2code_11696.txt [363B] [440], code_11697.txt [341B] [465]
Голосовали:GRIMAN
Ответов: 2
Рейтинг: 0
#3: 2009-02-10 17:07:52 ЛС | профиль | цитата
Честно говоря нет...
Если я вызову do1 то сработает on1 в dll?
А если я в dll позову do11 то он "выползет" из on11 в calldll?
Обзывать цифрами обязательно?
карма: -1

0
Администрация
Ответов: 15295
Рейтинг: 1519
#4: 2009-02-10 17:36:04 ЛС | профиль | цитата
8iv писал(а):
Если я вызову do1 то сработает on1 в dll?
А если я в dll позову do11 то он "выползет" из on11 в calldll?

да

8iv писал(а):
Обзывать цифрами обязательно?

нет
карма: 27
0
Ответов: 875
Рейтинг: 101
#5: 2009-02-11 13:35:13 ЛС | профиль | цитата
а можно ли сделать DLL с собственными именами функции в DLL
тоесть щас в собраной dll есть такие функции


DllInit
_hi_GetVar
_hi_doWork
_hi_DllInit
_hi_Icon
_hi_PointsInfo
GetVar
doWork

хотелось бы что то свое там вписать
карма: 1

0
Ответов: 5446
Рейтинг: 323
#6: 2009-02-11 14:28:22 ЛС | профиль | цитата
flud, нет.
карма: 1

0
Ответов: 86
Рейтинг: 1
#7: 2009-02-12 09:42:36 ЛС | профиль | цитата
Подскажите, что за ошибка: Runtime error 216 at 00003044?
Program:

#sha
Add(Edit,15456569,196,70)
{
Left=10
Top=10
Text="3"
DataType=1
}
Add(Button,3100100,140,126)
{
Left=70
Top=10
link(onClick,1670032:doData,[])
}
Add(DoData,1670032,196,126)
{
link(onEventData,4141108:Data,[])
link(Data,15456569:Text,[])
}
Add(Edit,13165245,308,126)
{
Left=135
Top=10
Text=""
DataType=1
}
Add(UseHiDLL,4141108,252,126)
{
DLLName="2x"
link(Result,13165245:doText,[])
}

DLL

#sha
Add(DLL,2953706,595,336)
{
WorkPoints=#6:Result|
EventPoints=#4:Data|
link(Data,7781398:doOperation,[])
}
Add(Math,7781398,651,336)
{
OpType=2
Op2=3
link(onResult,2953706:Result,[(695,342)(695,330)(583,330)(583,342)])
}

А ведь, что интересно, пример из каталога проектов "TestDLL" работает.
карма: 1

0
Ответов: 3514
Рейтинг: 184
#8: 2009-02-12 11:42:57 ЛС | профиль | цитата
Смотри примеры выше.. используй
Add(CallDLL,843754,490,231){
EventCount=1
WorkCount=1
DLLName="Project8.dll"
}
карма: 0
0
Ответов: 4641
Рейтинг: 334
#9: 2010-03-08 22:41:35 ЛС | профиль | цитата
А все таки почему используя calldll все ок! А при usehidll обязательно ошибка выскочит?
карма: 1
Время верстки: %cr_time% Текущее время: %time%
0
Разработчик
Ответов: 26113
Рейтинг: 2126
#10: 2010-03-08 23:28:54 ЛС | профиль | цитата
Ravilr писал(а):
А при usehidll обязательно ошибка выскочит?

Не понятно, но почему-то передача данных в потоке вызывает ошибку. Но если передавать через переменные, то все нормально

Program

Add(MainForm,2953706,266,217)
{
}
Add(Edit,15456569,322,217)
{
Left=10
Top=10
Text="3"
DataType=1
}
Add(Button,3100100,266,273)
{
Left=70
Top=10
link(onClick,1670032:doData,[])
}
Add(DoData,1670032,322,273)
{
link(onEventData,4141108:Data,[])
link(Data,15456569:Text,[])
}
Add(Edit,13165245,434,273)
{
Left=135
Top=10
Text=""
DataType=1
link(Str,4141108:Var,[(440,261)(412,261)(412,317)(384,317)])
}
Add(UseHiDLL,4141108,378,273)
{
DLLName="2x"
link(Result,13165245:doText,[])
}


DLL

Add(DLL,14754459,210,175)
{
WorkPoints=#6:Result|
EventPoints=#4:Data|
DataPoints=#3:Var|
link(Data,7781398:doOperation,[])
link(Var,7781398:Result,[(216,163)(244,163)(244,219)(272,219)])
}
Add(Math,7781398,266,175)
{
OpType=2
Op2=3
link(onResult,14754459:Result,[(310,181)(310,169)(198,169)(198,181)])
}

карма: 22

0
Ответов: 4641
Рейтинг: 334
#11: 2010-03-09 09:22:04 ЛС | профиль | цитата
nesco писал(а):
передача данных в потоке вызывает ошибку

а вот с другими компонентами все ок! что то не то в UseHiDll
карма: 1
Время верстки: %cr_time% Текущее время: %time%
0
Разработчик
Ответов: 26113
Рейтинг: 2126
#12: 2010-03-09 10:28:49 ЛС | профиль | цитата
Ravilr, я нашел баг и исправил
карма: 22

1
Голосовали:Ravilr
Ответов: 4628
Рейтинг: 749
#13: 2010-03-09 11:31:08 ЛС | профиль | цитата
flud писал(а):
а можно ли сделать DLL с собственными именами функции в DLL

iarspider писал(а):
нет.

Я тоже хотел бы DLL с произвольными именами функций. Почему не сделать, скажем, так. Добавить компонент "Экспортируемая функция", в свойствах указывается имя функции, соглашение по вызову и количество параметров типа DWORD. Очевидно, что в этих параметрах напрямую можно принимать-передавать многие простые типы данных, а все пользовательские передаются в виде указателя. Теперь, допустим, я хочу сделать плагин, скажем, для Тотал Коммандера. В DLL бросаю нужное количество компонентов "Экспортируемая функция" и пишу компонент или IC, который обрабатывает (и/или преобразовывает в стандартные типы HiAsm) все принимаемые пользовательские типы данных с этих функций. Мне кажеться, сдесь просто нужно внести поправки в проект DLL, чтобы в экспорте прописывались функции из компонентов "Экспортируемая функция".
карма: 26

1
Голосовали:CriDos
Разработчик
Ответов: 4698
Рейтинг: 426
#14: 2010-03-09 18:03:35 ЛС | профиль | цитата
У меня такая идея была, но нужно править кодогенератор, на что руки не достают
карма: 10
0
14
Сообщение
...
Прикрепленные файлы
(файлы не залиты)