К сожалению через поток запустить никак не получается даже файл с простеньким примером,
который для простоты целиком считывается с диска.
Хотя сам поток запускается, даже в программе откомпилированной в нативе коде, а не только
P-коде, как рекомендуют.
Если кому интересно ложу свой пример, где поток запускает программу размещенную в модуле.
Поток можно запустить(кнопка1), приостановить (3), продолжить (4). Кнопка 2-выход.
На форме должно быть два текстбокса.
Option Explicit
Dim file$, lFileLength As Long, BinaryData() As Byte
Dim dwFlags As Long, ThreadID As Long, thread1 As Long, Adres As Long
Private Sub Command1_Click()
file$ = App.Path + "\Primer.exe"
lFileLength = FileLen(file$)
ReDim BinaryData(lFileLength - 1)
Open file$ For Binary Access Read As #1
Get 1, , BinaryData()
Close #1
Adres = VarPtr(BinaryData(0))
Text2.Text = Adres
dwFlags = CREATE_SUSPENDED
'thread1 = CreateThread(ByVal 0&, ByVal 0&, Adres, ByVal 0&, dwFlags, ThreadID)
thread1 = CreateThread(ByVal 0&, ByVal 0&, AddressOf ThreadProc, ByVal 0&, dwFlags, ThreadID)
If thread1 = 0 Then End
Command4_Click
End Sub
Private Sub Command3_Click()
SuspendThread thread1
End Sub
Private Sub Command2_Click()
Unload Me
End Sub
Private Sub Command4_Click()
ResumeThread thread1
End Sub
А это код модуля.
Public Const CREATE_SUSPENDED = &H4
Public Declare Function SuspendThread Lib "kernel32" (ByVal hThread As Long) As Long
Public Declare Function ResumeThread Lib "kernel32" (ByVal hThread As Long) As Long
Public Declare Function CreateThread Lib "kernel32" (ByVal lpThreadAttributes _
As Any, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, _
lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadId As Long) As Long
Public Sub ThreadProc()
Dim x&
For x = 1 To 1000
Form1.Text1.Text = x
Next x
End Sub