回 帖 发 新 帖 刷新版面

主题:这个API怎么用?为什么会出错?????????

刚刚在用shell execute这个API,运行时出现了错误.
这是这个API的声明:
Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
这是调用时的语句:
Call ShellExecute(0, "open", OpenFileDialog1.FileName, vbNullString, vbNullString, vbNormalFocus)
运行时出现下面的错误:
Managed Debugging Assistant 'PInvokeStackImbalance' has detected a problem in 'D:\变化计数器\bin\变化计数器.vshost.exe'.
Additional Information: 对 PInvoke 函数“变化计数器!变化计数器.Form1::ShellExecute”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。

不知如何解决????

回复列表 (共2个回复)

沙发

Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Integer, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Integer) As Integer

板凳


谢谢指点,在VB中的LONG在.NET中只能用INTEGER吗?
现在这个解决了,不过在取文件名进行比较时,出现了提示说"An unhandled exception of type 'System.ArgumentException' occurred in Microsoft.VisualBasic.dll

Additional information: 路径中具有非法字符。
"
而且我所选的那个文件的文件名在那个OUTPUT窗口中显示的不是一个完整的文件名,比如我选的是文本文件"考试表",在那里显示的文件名却是"考",也出现了上面的提示.这是为什么?

我来回复

您尚未登录,请登录后再回复。点此登录或注册