在VB6中哪里可以找到GetProcessImageFileName?

在VB6中哪里可以找到GetProcessImageFileName?,vb6,windows-xp,Vb6,Windows Xp,我试图在VB6应用程序中编写一个对GetProcessImageFileName的调用,但是 Run-time error '453': Can't find DLL entry point GetProcessImageFileName in PSAPI.DLL 据我所知,可以在文档中的PSAPI.DLL中找到它 我的代码看起来像 Public Declare Function GetProcessImageFileName Lib "PSAPI.DLL" _ (By

我试图在VB6应用程序中编写一个对GetProcessImageFileName的调用,但是

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上运行

编辑根据Joseph的建议,我已将代码更改为使用
GetProcessImageFileNameA
,因此

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


这样做(与W版本相同)会导致程序和VB6开发环境崩溃,因此这里的某个地方隐藏着另一个问题。

它应该是
GetProcessImageFileNameA
GetProcessImageFileNameW
。大多数接受字符串作为参数的Windows API函数(除了
GetProcAddress
)都有两个原型,一个是ANSI(带有
A
后缀),另一个是unicode(带有
W
后缀)


它应该是
GetProcessImageFileNameA
GetProcessImageFileNameW
。大多数接受字符串作为参数的Windows API函数(除了
GetProcAddress
)都有两个原型,一个是ANSI(带有
A
后缀),另一个是unicode(带有
W
后缀)


在VB6中,当传递字符串时,始终需要A版本。使用W版本意味着传递字符串指针,并更改声明;我已经编辑了这个问题,并给出了尝试的结果。@Joseph,完成了。非常感谢(我知道我把它们搞错了)。当然
Declare
应该为
hProcess
nSize
使用
GetProcessImageFileName
而不是VB6中的a?,在传递字符串时,您总是需要a版本。使用W版本意味着传递字符串指针,并更改声明;我已经编辑了这个问题,并给出了尝试的结果。@Joseph,完成了。非常感谢(我发现我把它们搞错了)。当然
Declare
对于
hProcess
nSize
应该有
ByVal
,并且示例调用应该使用
GetProcessImageFileName
而不带a?是否
image\u name
实际长度为1024个字符?像这样的API函数要求您创建一个要写入的字符串缓冲区。如果你对它撒谎,说你正在传递一个1024字节的字符串,而它没有,事情就会崩溃。@Deanna,谢谢你:为了安全起见,我刚刚添加了
image\u name=string(1024,”)
,但它仍然在崩溃。
image\u name
实际上有1024个字符长吗?像这样的API函数要求您创建一个要写入的字符串缓冲区。如果你对它撒谎,说你正在传递一个1024字节的字符串,而它没有,事情就会崩溃。@Deanna,谢谢你:为了安全起见,我刚刚添加了
image\u name=string(1024,”)
,但它仍然在崩溃。
name_length = GetProcessImageFileNameA(process_handle, image_name, 1024)
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)