Здравствуйте, Litle, Вы писали:
L>будьте добры по-подробней. L>Дллимпортом я умею пользоваться.
Так а куда проще/подробнее? Там же ГОТОВЫЕ СИГНАТУРЫ, и на C# и на VB.NET. Вообще все прописано, тупой копи-паст остался. Поиск юзали по требуемой функции? На том сайте имею в виду, не на РСДНе.
Re[4]: Как передать указатель на буфер в win32 API
От:
Аноним
Дата:
22.06.09 17:18
Оценка:
Здравствуйте, Smarty, Вы писали:
S>Здравствуйте, Litle, Вы писали:
L>>будьте добры по-подробней. L>>Дллимпортом я умею пользоваться.
S>Так а куда проще/подробнее? Там же ГОТОВЫЕ СИГНАТУРЫ, и на C# и на VB.NET. Вообще все прописано, тупой копи-паст остался. Поиск юзали по требуемой функции? На том сайте имею в виду, не на РСДНе.
dllimport я оттуда и брал. Но для меня роблема как объявить указатель на массив в бесике.
Re[5]: Как передать указатель на буфер в win32 API
Здравствуйте, Аноним, Вы писали:
А>dllimport я оттуда и брал. Но для меня роблема как объявить указатель на массив в бесике.
Указатель на массив сиволов может быть представлен через экземпляр класса StringBuilder. Причем свойство StringBuilder.Capacity — это размер этого массива (буффера).
Также желательно через атрибут MarshalAs задать тип, например так: [MarshalAs(UnmanagedType.LPStr)]. И через атрибут DllImport — кодировку [DllImport(..., CharSet = CharSet.Ansi, ...)].
Re[6]: Как передать указатель на буфер в win32 API
Здравствуйте, Овощ, Вы писали:
О>Здравствуйте, Аноним, Вы писали:
А>>dllimport я оттуда и брал. Но для меня роблема как объявить указатель на массив в бесике.
О>Указатель на массив сиволов может быть представлен через экземпляр класса StringBuilder. Причем свойство StringBuilder.Capacity — это размер этого массива (буффера). О>Также желательно через атрибут MarshalAs задать тип, например так: [MarshalAs(UnmanagedType.LPStr)]. И через атрибут DllImport — кодировку [DllImport(..., CharSet = CharSet.Ansi, ...)].
Хорошо, я имею переременную StringBuilder. Но мне нужна переменная intPtr? как мне её получить....
Сделал сам, но мне кажется убого. Если кто подскажет более правильный вариант — буду признателен.
Прототип.
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Public Shared Function SendMessage( _
ByVal hWnd As IntPtr, _
ByVal Msg As UInteger, _
ByVal wParam As IntPtr, _
ByVal lParam As IntPtr) As IntPtr
End Function
Код в функции.
Dim length As IntPtr = SendMessage(hwnd, WM_GETTEXTLENGTH, 0, 0)
' Выделение памяти под буфер Dim buffer As IntPtr = Marshal.AllocHGlobal((length.ToInt32 + 1) * 2) ' размер символа - 2байта
SendMessage(hwnd, WM_GETTEXT, (length.ToInt32 + 1), buffer)
Dim returnValue As String = Marshal.PtrToStringUni(buffer)
' Очистка памяти
Marshal.FreeHGlobal(buffer)
Re[8]: Как передать указатель на буфер в win32 API