Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 |

 

  Вопрос: Возврат функцией управления Добавлено: 05.06.05 23:27  

Автор вопроса:  Илья | Web-сайт: www.lirc.narod.ru | ICQ: 251647191 

Ответить

  Ответы Всего ответов: 32  

Номер ответа: 16
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #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:


//=================== global vars ===============================
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-сайт: xury.zx6.ru
 Профиль | | #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-сайт: www.lirc.narod.ru
 Профиль | | #25
Добавлено: 11.06.05 21:22
Блин че за разговоры? Я же просто помочь просил? Как нормально осуществить всю вышеуказанную хрень без си, асма и ВБ? Можно на АПИ

Ответить

Номер ответа: 26
Автор ответа:
 Илья



ICQ: 251647191 

Вопросов: 37
Ответов: 167
 Web-сайт: www.lirc.narod.ru
 Профиль | | #26
Добавлено: 11.06.05 21:24
а если на другом языке, то подкиньте длл-ку скомпилированную и руководство :)
Vashenin-Iluha@yandex.ru

Ответить

Номер ответа: 27
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #27 Добавлено: 12.06.05 00:12
dll у тебя в ящике. Ложи в папку с программой или в системную папку. Только не надо вызывать из IDE, скомпилируй и запускай скомпилированный ехе. Декларируется и вызывается так:

Private Declare Function AsyncBeep Lib "AB.dll" (ByVal dwFreq As Long, _
                   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-сайт: hw.t-k.ru
 Профиль | | #28
Добавлено: 12.06.05 11:40
Только не надо вызывать из IDE, скомпилируй и запускай скомпилированный ехе

Гы :) Очень вероятно что dll на си, иначе бы таковой оговорки небыло...

Ответить

Номер ответа: 29
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #29 Добавлено: 12.06.05 12:49
После прочтения ответа 17 догаться об этом совсем не сложно :)

Если запускать программу и вызвать функцию из vb IDE, то ничего страшного не будет, если не закрывать программу до завершения бикающего
потока. Это единственное ограничение. В компилированном виде можно и это делать.

Если си не устраивает, есть асмовая, если и это не устроит - дальше не ко мне. Есть pb - делать можно и на нём.

Ответить

Номер ответа: 30
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #30
Добавлено: 12.06.05 15:42
А если такое дело, почему бы прямо в ВБ нить новую не сделать?

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам