Хм, этот стиль кодирования выглядит ужасно знакомым ...
Одна ошибка, которую обычно делают люди, - это использование «стандартных» Declare
подписей из таких источников, как API Viewer , не понимая, что они означают, например ::
Private Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" ( _
ByVal lpApplicationName As String, _
ByVal lpCommandLine As String, _
lpProcessAttributes As SECURITY_ATTRIBUTES, _
lpThreadAttributes As SECURITY_ATTRIBUTES, _
ByVal bInheritHandles As Long, _
ByVal dwCreationFlags As Long, _
lpEnvironment As Any, _
ByVal lpCurrentDriectory As String, _
lpStartupInfo As STARTUPINFO, _
lpProcessInformation As PROCESS_INFORMATION) As Long
Эти As String
и As Any
декларации имеют последствия, которые люди часто игнорируют.
Обычно гораздо, намного лучше использовать точки входа "W" и объявить все указатели как ByVal xxx As Long
, а затем применить функции указателя VB6, где это необходимо. Но вы можете привести лошадь к воде ...
Попробуйте это:
create_result = CreateProcess(vbNullString, _
command_line, _
process_attributes, _
thread_attributes, _
0, _
0, _
ByVal 0&, _
vbNullString, _
startup_information, _
our_process_information)
Или, намного лучше, попробуйте:
Private Declare Function CreateProcessW Lib "kernel32" ( _
ByVal lpApplicationName As Long, _
ByVal lpCommandLine As Long, _
ByVal lpProcessAttributes As Long, _
ByVal lpThreadAttributes As Long, _
ByVal bInheritHandles As Long, _
ByVal dwCreationFlags As Long, _
ByVal lpEnvironment As Long, _
ByVal lpCurrentDriectory As Long, _
ByVal lpStartupInfo As Long, _
ByVal lpProcessInformation As Long) As Long
Dim create_result As Long
Dim startup_information As STARTUPINFO
Dim our_process_information As PROCESS_INFORMATION
create_result = CreateProcessW(0, _
StrPtr(command_line), _
0, _
0, _
0, _
0, _
0, _
0, _
VarPtr(startup_information), _
VarPtr(our_process_information))
Я предполагаю, что именно здесь вы "ломали" свой драйвер ODBC (к сожалению, поставщик OLEDB был бы намного лучше, но я не знаю достойного бесплатного для MySQL).
О, проблема (и разница здесь)?
Вы сбрасывали блок среды в ничто, т. Е., Возможно, нарушение PATH не позволяет вашему драйверу ODBC работать.
Нулевые указатели, нули и пустые структуры - это совершенно разные вещи.