Страница: 1 | 2 | 3 |
Вопрос: Возврат функцией управления
Добавлено: 05.06.05 23:27
Автор вопроса: Илья | Web-сайт:
Ответы
Всего ответов: 32
Номер ответа: 16
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #16
Добавлено: 10.06.05 11:22
2Morpheus, написал длл, экспортировал из нее функцию с одним параметром LPARAM, получил в VB указатель (LoadLibrary + GetProcAddress) и вызвал CreateThread подставив указатель на процедуру. В итоге CreateThread пролетаем быстро, делаем основной код, а где-то там в др. потоке в твоей dll бежит в это время созданный поток и делает свои дела...
разжевал кажись
Номер ответа: 17
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #17
Добавлено: 10.06.05 12:02
Вот весь код, что находится в dll:
int Freq,Dur;
//===============================================================
DWORD WINAPI BeepProc(LPVOID lParam){
Beep(Freq, Dur);
return 1;
}
//=================== for export ================================
void AsyncBeep(int dwFreq, int dwMs){
Freq = dwFreq;
Dur = dwMs;
CreateThread(NULL, 0, &BeepProc, NULL, 0, NULL);
}
//===============================================================
BOOL WINAPI main(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved){
if (fdwReason==DLL_PROCESS_ATTACH) return TRUE;
return FALSE;
}
больше ничего. На экспорт AsyncBeep. И вызываешь также как бип:
AsyncBeep <частота>,<длительность>
Номер ответа: 18
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #18
Добавлено: 10.06.05 13:25
А нах вообще dll то нужна? Такой код на асме написать проще, запихнуть в массив и вызывать оттуда.
Номер ответа: 19
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #19
Добавлено: 10.06.05 15:23
В каком месте проще?
Получать адрес массива, записывать параметры в переменные, получать адреса переменных для передачи, вызывать CallWindowProc - это проще, чем AsyncBeep <частота>,<длительность> ??
Номер ответа: 20
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #20
Добавлено: 10.06.05 15:33
Private Sub AsyncBeep(Частота, Длительность)
ProcArray(xxx)=Частота
ProcArray(yyy)=Длительность
CallWindowProc varptr(ProcArray(0)),0,0,0,0
end Sub
'-------------------------------------
Private Sub Form_Load
AsyncBeep 10,15
End Sub
Количество левых dll - 0.0
Номер ответа: 21
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #21
Добавлено: 10.06.05 15:35
P.S. CallWindowProc нах не нужен, CreateThread.
Номер ответа: 22
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #22
Добавлено: 10.06.05 15:41
ээээ... а я подзабыл, нити надо закрывать после завершения работы?
Номер ответа: 23
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #23
Добавлено: 10.06.05 16:06
Хендлы надо закрывать, после начала работы. Тред должен закрыться сам. Либо TerminateThread
Номер ответа: 24
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #24
Добавлено: 10.06.05 17:18
Ха-ха-ха !!!
Выражение "левая dll" меня просто умиляет )))
А та программа, которую ты пишешь она не левая?
Чем отличается exe от dll? Оба будут написаны одним и тем же человеком, оба являются исполняемым кодом. Так почему exe не левый, а dll левая?
Если исходить из "левости", то на компе не должно быть ни одной программы и ни одной dll, написанной не мелкософтом. Потому что всё, что не мелкософтовое - всё левое.
Так что иди и подумай на досуге. А заодно попробуй из массива вызвать и посмотри, что проще и надёжней.
Можешь даже сравнить количество строк, что для вб программера является одним из основных качеств программы )))
Номер ответа: 25
Автор ответа:
Илья
ICQ: 251647191
Вопросов: 37
Ответов: 167
Web-сайт:
Профиль | | #25
Добавлено: 11.06.05 21:22
Блин че за разговоры? Я же просто помочь просил? Как нормально осуществить всю вышеуказанную хрень без си, асма и ВБ? Можно на АПИ
Номер ответа: 26
Автор ответа:
Илья
ICQ: 251647191
Вопросов: 37
Ответов: 167
Web-сайт:
Профиль | | #26
Добавлено: 11.06.05 21:24
а если на другом языке, то подкиньте длл-ку скомпилированную и руководство
Vashenin-Iluha@yandex.ru
Номер ответа: 27
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #27
Добавлено: 12.06.05 00:12
dll у тебя в ящике. Ложи в папку с программой или в системную папку. Только не надо вызывать из IDE, скомпилируй и запускай скомпилированный ехе. Декларируется и вызывается так:
ByVal dwMs As Long) As Long
Private Sub cmd1_Click()
AsyncBeep 1000, 5000
End Sub
P.S.
Имхо, твои возмущения здесь ни к месту.
Номер ответа: 28
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #28
Добавлено: 12.06.05 11:40
Гы Очень вероятно что dll на си, иначе бы таковой оговорки небыло...
Номер ответа: 29
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #29
Добавлено: 12.06.05 12:49
После прочтения ответа 17 догаться об этом совсем не сложно
Если запускать программу и вызвать функцию из vb IDE, то ничего страшного не будет, если не закрывать программу до завершения бикающего
потока. Это единственное ограничение. В компилированном виде можно и это делать.
Если си не устраивает, есть асмовая, если и это не устроит - дальше не ко мне. Есть pb - делать можно и на нём.
Номер ответа: 30
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #30
Добавлено: 12.06.05 15:42
А если такое дело, почему бы прямо в ВБ нить новую не сделать?