Нужна помощь в портировании кода в VB6, чтобы VB.NET
Я пытаюсь портировать какой-то код vb6 на vb.net и одному объекту в строке кода не присваивается значение до его использования Вот код
Public Function GetFileFullPath(ByVal hFile As Long) As String Dim objName As UNICODE_STRING Dim hHeap As Long Dim dwSize As Long Dim dwDriversSize As Long Dim pName As Long Dim ntStatus As Long Dim i As Long Dim strDrives As String Dim strArray() As String Dim strDrive As String Dim strTmp As String Dim strTemp As String hHeap = GetProcessHeap pName = HeapAlloc(hHeap, HEAP_ZERO_MEMORY, &H1000) ntStatus = NtQueryObject(hFile, ObjectNameInformation, pName, &H1000, dwSize) If (NT_SUCCESS(ntStatus)) Then i = 1 Do While (ntStatus = STATUS_INFO_LEN_MISMATCH) pName = HeapReAlloc(hHeap, HEAP_ZERO_MEMORY, pName, &H1000 * i) ntStatus = NtQueryObject(hFile, ObjectNameInformation, pName, &H1000, ByVal 0) i = i + 1 Loop End If HeapFree hHeap, 0, pName strTemp = String$(512, Chr$(0)) lstrcpyW strTemp, pName + Len(objName)
В самой последней строке objName не был инициализирован, и тогда я получаю предупреждение: "objName используется до того, как ему было присвоено значение.
Как вы думаете, автор имел в виду Len(pName) ?
спасибо
Что я уже пробовал:
У меня есть функция, которая использует objName. Большая его часть включена в пост.
Richard Deeming
Из того, что я вижу, NtQueryObject[^] не является публичным API. Он может быть изменен или удален из Windows без предварительного уведомления.
Основываясь на имени функции, я предполагаю, что вы хотите получить путь к файлу на основе дескриптора файла. Вы, вероятно, должны использовать GetFinalPathNameByHandle[^] чтобы сделать это. (Получение имени файла из дескриптора файла[^])
Если это преобразованный код, то преобразователь сделал очень плохую работу. Существует несколько очевидных проблем с кодом - например, использование On Error ...
вместо Try .. Catch
, с помощью Long
вместо IntPtr
для представления ручки и т. д.
Member 12333593
Спасибо. Вы мне очень помогли. И я действительно удалил "On Error" вскоре после того, как опубликовал его, плюс удалил его из своего кода. Я заменю его на try/catch. Спасибо также за long вместо IntPtr.