Public Function GetStrFromPtrW(lpszW As Long) As String
Dim sRtn As String
sRtn = String$(lstrlenW(ByVal lpszW) * 2, 0)
Call WideCharToMultiByte(CP_ACP, 0, ByVal lpszW, -1, ByVal sRtn, Len(sRtn), _
0, 0)
GetStrFromPtrW = GetStrFromBufferA(sRtn)
End Function
Private Function GetStrFromBufferA(sz As String) As String
If InStr(sz, vbNullChar) Then
GetStrFromBufferA = Left$(sz, InStr(sz, vbNullChar) - 1)
Else
GetStrFromBufferA = sz
End If
End Function
Option Explicit
Private Declare Function SysAllocString Lib "oleaut32.dll" (ByVal pOlechar As Long) As String
Private Sub Form_Load()
Dim pattern As String, result As String
pattern = "Проверка"
result = SysAllocString(StrPtr(pattern))
MsgBox result
MsgBox StrConv(result, vbFromUnicode)
End Sub
Да, мы это с GSerg-ом в АСЕ обсуждали, но что-то с первого раза у меня не вышло, поэтому решил просто воспользоваться кодом из API-Guidа. Об оптимизации конвертации строк я, честно говоря, не задумывался...GSerg писал(а):LPWSRT в CopyMemory отправляет, как впрочем, и LPSTR
... для продвинутых всегда есть возможность объявить SysAllocString в TLB, и излишняя конвертация не будет выполняться. Более того, по моему опыту, в продвинутых программах без TLB всё равно не обойтись, и добавить в неё одно объявление -- не заморочно.
long InStrQ([in] long Start,[in] BSTR String, [in] BSTR SubString);
О чем ты? Какого эталона? Просто я использовал то, что первое попалось под руку.tyomitch писал(а):В API-Guide чего только не понапишут... Даже про ExitProcess(GetExitCodeProcess(GetCurrentProcess))) есть.
Почему его возвели в статус эталона?
Ошибочка вышла - ночью по запарке совсем не то написал. ProcessId в структуре SYSTEM_HANDLE_INFORMATION нужно сравнивать с PID-ом csrss и если они равны, то опрашивать описатель с помощью ZwQueryInformationProcess. Если в полученном буфере (тип PROCESS_BASIC_INFORMATION) поле UniqueProcessId равно PID-у KAV, то значит нашли, можно копировать...Twister писал(а):Нам нужно лишь найти нужный описатель (сравнивая ProcessId в структуре SYSTEM_HANDLE_INFORMATION c PID-ом KAV-а)
Twister писал(а):цель оптимизировать ВСЕ я не ставил... По идее нужно еще уточнить работу с потоками.
Да дело не в готовом коде. Дело в том, что статья моя о хэндлах, а не о конвертации строк. Но... Поправочку я внес и хочу сказать спасибо за подсказку. Нормальная версия тут. На мыло к Гайдару она тоже ушла. Будем ждать...tyomitch писал(а):Тебе дали готовый код. Тебе тяжело вставить одну строчку вместо двух процедур?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13