Модератор: Хакер
BV писал(а):Я не будущий пользователь, но гармоничнее всего такой код смотрелся бы в виде обертки компилятора.
Хакер писал(а):Вопрос будущим пользователям: в каком виде выполнить кирпич?
Хакер писал(а):И какая бы разница должна быть между обычным и модифицированным компилятором? Не понимаю.
VBTerminator писал(а):По-моему, лучше в виде .bas-модуля, чтобы на таскать с собой лишние файлы библиотек.
BV писал(а):Обертка парсит код на наличие определенных функций и вставляет на их место заготовленный inline с ассемблерным кодом (или как оно у тебя реализовано).
Я не против Dll, как таковых, но такие реализации бывают в некоторых случаях очень неудобными. Например если, что-то приходится делать на VBA. Хотя я не припоминаю, чтобы там когда нибудь требовалась многопоточность, но бывает всякое. Да и к тому же я не про этот вариант, а про dll вообще хотел сказать. Ладно в VB можно слепить дистрибутивчик, для чего даже просто архиватор можно задействовать и положить в него несколько Dll'ок и при надобности даже их регистировать. Другое дело, когда документ с автоматизацией на VBA, в этом случае dll это жуткий геммор.Debugger писал(а):Я "За" bas-модуль, против dll-ок.Несколько раз сталкивался с тем, что люди требовали (или же сторонний софт не позволял иначе) присылать один exe-файл. Приходилось пользоваться пакером.
Хакер писал(а): самым правильным будет засунуть мою функцию CreateBasicThread в рантайм, где ему и место.
Хакер писал(а):Так моя dll ведь будет с исходниками.
Mikle писал(а):И таскать с приложением весь рантайм, когда он и так везде есть, лучше пусть моя dll станет на несколько килобайт тяжелее.
По сути это тогда получиться пропатченый рантайм, так может просто патчер встраивать в приложение и при первом запуске патчить, а дальше уже все как по маслу. А какие еще новые фитчи, кроме многопоточности. Я так понимаюХакер писал(а):Я думаю стоит таскать, ради огромного числа новых фич
еще и новая версия FNDLL грядет, если разрешиться проблема с инициализацией контекста?Хакер писал(а):многопоточность и NativeDLL. Потому что и там и там всё падало и рушилось именно по этой причине: не инициализирован контекст, а рантайм ожидает обратного.
ger_kar писал(а):просто патчер встраивать в приложение
Хакер писал(а):стоит таскать, ради огромного числа новых фич
Мне даст! , а вот другим ...Mikle писал(а):А тебе винда даст патчить её рантайм?
Кто так сказал? Вот гады.Mikle писал(а):Если так - то стоит, особенно, если в Win8 уже не будет vb6 рантайма.
ger_kar писал(а):Кто так сказал? Вот гады.
Mikle писал(а):Это я гипотетически. Не в восьмёрке, так в девятке, рантайм уберут.
Хакер писал(а):И зачем? Чем это лучше, чем просто иметь функцию CreateCoolThread (название чисто условное), являющуюся обёрткой над CreateThread?
Хакер писал(а):В общем, я подхожу к Add-in-ам так: делать их, либо когда фича опциональна (вроде расставлялки комментариев), либо когда по-другому вообще невозможно (вроде FNDLL).
Хакер писал(а):так он сделан в 2009 году
Private Declare Function CreateBasicThread Lib "vbthrds.dll" (lpSecAttr As Any, ByVal pStartProc As Long, ByVal pSParam As Long) As Long
Private Sub Form_Load()
Label1.Caption = "Главный поток, TID = " + CStr(App.ThreadID)
End Sub
Private Sub Hello_Click()
CreateBasicThread ByVal 0&, AddressOf HelloProc, 0
End Sub
Private Sub InpBox_Click()
CreateBasicThread ByVal 0&, AddressOf InpBoxProc, 0
End Sub
Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long
Public Function HelloProc(ByVal xParam As Long) As Long
MsgBox "Привет! Привет! Привет из нового потока! Мой TID = " + CStr(GetCurrentThreadId)
End Function
Public Function InpBoxProc(ByVal xParam As Long) As Long
InputBox "Мой TID равен " + CStr(GetCurrentThreadId) + ". Вам нравится многопоточность?", , "Очень даже"
End Function
Public Sub Main()
MsgBox "Я Sub-Main и сейчас покажу инстанс формы"
Form1.Show
End Sub
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2