Где я могу найти GetProcessImageFileName в VB6? - PullRequest
0 голосов
/ 09 декабря 2011

Я пытаюсь закодировать вызов GetProcessImageFileName в приложении VB6, но получаю ...

Run-time error '453':
    Can't find DLL entry point GetProcessImageFileName in PSAPI.DLL

Мне дано понять, что его можно найти в PSAPI.DLL издокументация здесь .

Мой код выглядит как ...

Public Declare Function GetProcessImageFileName Lib "PSAPI.DLL" _
        (ByVal hProcess As Long, _
         lpImageName As String, _
         ByVal nSize As Long) As Long

Public Sub MySub()
Dim name_length As Long
Dim image_name As String
...fill in process handle...
name_length = GetProcessImageFileName(process_handle, image_name, 1024)

Кто-нибудь знает, что мне здесь делать?Я работаю на Windows XP.

РЕДАКТИРОВАТЬ Как предположил JosephH, я изменил код для использования GetProcessImageFileNameA, таким образом ...

Public Declare Function GetProcessImageFileNameA Lib "PSAPI.DLL" _
        (ByVal hProcess As Long, _
         lpImageName As String, _
         ByVal nSize As Long) As Long

и

name_length = GetProcessImageFileNameA(process_handle, image_name, 1024)

В результате этого (то же самое с версией W) происходит сбой программы и среды разработки VB6, поэтому здесь где-то скрывается другая проблема.

1 Ответ

4 голосов
/ 09 декабря 2011

Это должно быть либо GetProcessImageFileNameA, либо GetProcessImageFileNameW. Большинство функций Windows API (кроме GetProcAddress), которые принимают строку в качестве аргумента, имеют два прототипа, один с ANSI (с суффиксом A) и один с юникодом (с суффиксом W)

Public Declare Function GetProcessImageFileName Lib "PSAPI.DLL" Alias "GetProcessImageFileNameA" _
    (hProcess As Long, _
     ByVal lpImageName As String, _
     nSize As Long) As Long

name_length = GetProcessImageFileNameA(process_handle, image_name, 1024)
...