在VB6中哪里可以找到GetProcessImageFileName?
我试图在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
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)