tho*_*ark 0 .net c# vb.net winapi
使用 Visual Basic 创建符号链接的最简单方法是什么?以下代码是我使用 Win32 API 编写的简单代码,但似乎不起作用:
Imports System.Runtime.InteropServices
Public Class SymbolicLinker
Private Enum SymbolicLink
File = 0
Directory = 1
End Enum
<DllImport("kernel32.dll")> _
Private Shared Function CreateSymbolicLink(lpSymlinkFileName As String, lpTargetFileName As String, dwFlags As SymbolicLink) As Boolean
End Function
End Class
Run Code Online (Sandbox Code Playgroud)
令我困惑的是,以下 C# 代码运行良好:
using System.Runtime.InteropServices;
namespace Testbed_SymbolicLinks
{
class SymbolicLinker
{
[DllImport("kernel32.dll")]
static extern bool CreateSymbolicLink(string lpSymlinkFileName, string lpTargetFileName, SymbolicLink dwFlags);
enum SymbolicLink
{
File = 0,
Directory = 1
}
}
Run Code Online (Sandbox Code Playgroud)
}
我是否以某种方式错误地将代码从 C# 移植到 VB?
编辑: 我的用例非常简单:
Module Module1
Sub Main()
Console.WriteLine("Entering application.")
Try
CreateNewSymbolicLink()
Catch e As Exception
Console.WriteLine("An error occured.")
End Try
Console.ReadKey()
End Sub
Sub CreateNewSymbolicLink()
Console.WriteLine("Enter the name of a valid file: ")
Dim file As String = Console.ReadLine()
Console.WriteLine("Enter the name of a symbolic file: ")
Dim symbol As String = Console.ReadLine()
Dim success As Boolean = SymbolicLinker.CreateSymbolicLink(symbol, file, SymbolicLink.File)
If success Then
Console.WriteLine("Web call was success")
Else
Console.WriteLine("Web call was a failure")
End If
End Sub
End Module
Run Code Online (Sandbox Code Playgroud)
你还没有展示你的真实代码,所以不可能说出哪里出了问题。这是有效的代码:
Imports System.Runtime.InteropServices
Public Class SymbolicLinker
Public Enum SymbolicLink
File = 0
Directory = 1
End Enum
<DllImport("kernel32.dll", SetLastError:=True)> _
Public Shared Function CreateSymbolicLink(lpSymlinkFileName As String, _
lpTargetFileName As String, _
dwFlags As SymbolicLink) As Boolean
End Function
End Class
Module Module1
Sub Main()
CreateNewSymbolicLink("C:\Users\xxx\Desktop\link.txt", _
"C:\Users\xxx\Desktop\foo.txt")
Console.ReadKey()
End Sub
Sub CreateNewSymbolicLink(linkName As String, targetName As String)
If Not SymbolicLinker.CreateSymbolicLink(linkName, targetName, _
SymbolicLinker.SymbolicLink.File) Then
Console.WriteLine(Marshal.GetLastWin32Error())
End If
End Sub
End Module
Run Code Online (Sandbox Code Playgroud)
请注意,我将SetLastError参数添加到了属性中DllImport。这使我们能够在发生故障时捕获错误代码。我还演示了如何获取该错误代码以及何时获取该错误代码。也就是说,当且仅当函数返回值指示失败。
| 归档时间: |
|
| 查看次数: |
3039 次 |
| 最近记录: |