powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как мне запихнуть Unicode-строку в ptr, который мне известен из Callback ф-ции
2 сообщений из 2, страница 1 из 1
Как мне запихнуть Unicode-строку в ptr, который мне известен из Callback ф-ции
    #39479922
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть вот такая ф-ция (MSDN_Windows):
FaxRoutingInstallationCallback callback function

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
BOOL WINAPI FaxRoutingInstallationCallback(
  __in   HANDLE FaxHandle,
  __in   LPVOID Context,
  __out  LPWSTR MethodName,
  __out  LPWSTR FriendlyName,
  __out  LPWSTR FunctionName,
  __out  LPWSTR Guid
);



Смысл такой, когда она вызывается она дает 4 буфера:
MethodName,FriendlyName,FunctionName,Guid

Реализация на .Net такая:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
  Public Delegate Function FaxRoutingInstallationCallback _
   (ByVal FaxHandle As IntPtr, ByVal Context As Integer, ByVal MethodName As IntPtr, ByVal FriendlyName As IntPtr, _
   ByVal FunctionName As IntPtr, ByVal Guid As IntPtr) As Boolean
...
  Private Function MyFaxRoutingInstallationCallback _
   (ByVal FaxHandle As IntPtr, ByVal Context As Integer, ByVal MethodName As IntPtr, ByVal FriendlyName As IntPtr, _
   ByVal FunctionName As IntPtr, ByVal Guid As IntPtr) As Boolean

    Static count As Integer
    count = count + 1
    If count > 1 Then Return False

    'test
    MsgBox(MethodName)
    MsgBox(FriendlyName)
    MsgBox(FunctionName)
    MsgBox(Guid)
...



Ф-ция у меня успешно вызывается, 4 тестовых MsgBox выдают мне 4 указателя.
В эти указатели как я понимаю я должен положить 4 "null-terminated Unicode character string" строки (константных).
У меня чего-то не получается (пару месяцев не програмировал).

Marshal.StringToCoTaskMemUni...
Marshal.StringToHGlobalUni...

Это понятно, но они пишут строку в новый указатель,
а у меня уже есть указатель, который мне предоставил callback.
И вот как мне запихнуть строку именно в этот уже имеющийся IntPtr.

ByRef ... as String здесь ясно дело что делать нельзя.
...
Рейтинг: 0 / 0
Как мне запихнуть Unicode-строку в ptr, который мне известен из Callback ф-ции
    #39480188
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разобрался вроде, вопрос снят.
Строка преобразуется в массив байтов, байты запихиваются в предоставленный указатель. Вроде заработало.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
 Private Function MyFaxRoutingInstallationCallback _
   (ByVal FaxHandle As IntPtr, ByVal Context As Integer, ByVal MethodName As IntPtr, ByVal FriendlyName As IntPtr, _
   ByVal FunctionName As IntPtr, ByVal Guid As IntPtr) As Boolean

    Static count As Integer
    count = count + 1
    If count > 1 Then Return False

    Dim ByteArray() As Byte
    ByteArray = System.Text.Encoding.Unicode.GetBytes(FAXROUTEMETHOD & Chr(0))
    Marshal.Copy(ByteArray, 0, MethodName, ByteArray.Length)
    ByteArray = System.Text.Encoding.Unicode.GetBytes(FAXROUTEFRIENDLYNAME & Chr(0))
    Marshal.Copy(ByteArray, 0, FriendlyName, ByteArray.Length)
    ByteArray = System.Text.Encoding.Unicode.GetBytes(FAXROUTEFUNCTION & Chr(0))
    Marshal.Copy(ByteArray, 0, FunctionName, ByteArray.Length)
    ByteArray = System.Text.Encoding.Unicode.GetBytes(ROUTEITGUID & Chr(0))
    Marshal.Copy(ByteArray, 0, Guid, ByteArray.Length)

    Return True
  End Function
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как мне запихнуть Unicode-строку в ptr, который мне известен из Callback ф-ции
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]