2017-01-12 8 views
0

Я тестирую код перед добавлением в существующий проект. Он отлично работал, когда это выглядело так:Ошибка выполнения VB6 '424': Object Required '

Option Explicit 

Dim objShell As Object 
Dim m_EngineRun As Object 

Sub main() 

Set objShell = CreateObject("WScript.Shell") 
Set m_EngineRun = objShell.Exec("notepad.exe") 
Dim objWMIService As Object 
Dim colProcessList As Object 

MsgBox m_EngineRun.ProcessID 

Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") 
Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where ProcessID = " & m_EngineRun.ProcessID) 

If colProcessList.Count = 1 Then 
    objShell.run "TASKKILL /F /IM " & m_EngineRun.ProcessID, , True 
    MsgBox m_EngineRun.ProcessID & (" terminated") 
Else 
    MsgBox m_EngineRun.ProcessID & (" does not exist") 
End If 
End Sub 

Затем я добавил строки ниже, и он не с ошибкой 424.

Option Explicit 

Dim objShell As Object 
Dim m_EngineRun As Object 

'Added this line 
Dim m_PID As Object 

Sub main() 

Set objShell = CreateObject("WScript.Shell") 
Set m_EngineRun = objShell.Exec("notepad.exe") 

'And this line 
Set m_PID = m_EngineRun.ProcessID 
Dim objWMIService As Object 
Dim colProcessList As Object 

'And changed this one 
MsgBox m_PID 

Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") 
Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where ProcessID = " & m_EngineRun.ProcessID) 

If colProcessList.Count = 1 Then 
    objShell.run "TASKKILL /F /IM " & m_EngineRun.ProcessID, , True 
    MsgBox m_EngineRun.ProcessID & (" terminated") 
Else 
    MsgBox m_EngineRun.ProcessID & (" does not exist") 
End If 
End Sub 

Это определенно линия Set m_PID = m_EngineRun.ProcessID, которая является нарушителем спокойствия.

Я просто не смог найти ответ, который касается моей конкретной проблемы. Мне кажется, что m_PID не должен быть объектом? Но если да, то что это должно быть?

Любая помощь очень ценится.

+0

Я думал, что это будет объект, потому что мне не хватает знаний VB6, чтобы лучше знать :) То, что вы предложили, прекрасно работало! Спасибо за вашу помощь. Позор, я не могу отметить вас как правильные. – Chris

ответ

2

ProcessID не является объектом; это целое число (числовой идентификатор процесса).

Снимите As Object и Set, и просто назначить непосредственно:

Dim m_PID 
'.... 
m_PID = m_EngineRun.ProcessID 

Это, вероятно, лучше, чтобы не предположить, что все является объектом, потому что подавляющее большинство вещей, с которыми вы столкнетесь, вероятно, нет. Я бы начал с того, что не ожидал объекта, если вы не знаете иначе, а затем перейдите к объекту try, если у вас возникнут проблемы.