Добрый день!
Никогда не писал на vba, но понадобилось решить задачу. Сегодня столкнулся с проблемой.
Суть задачи: подключить DLL, передать ей команду (строку) и получить ответ. Обмен строками в utf-8.
Решил действовать в "лоб".
1) Подключил dll, описал функцию.
Private Declare Function SendFunc Lib "somelib.dll" _
(ByVal lpMess As Long) As Long
2) Далее стал передовать в функцию
Dim str As String
Dim pAns As Long
str = "some text"
lpAns = SendFunc(StrPtr(str))
Обратно получаю ответ (ответ тоже идет в utf-8), используя: (нашел в интернете)
Private Function PointerToString(lngPtr As Long) As String
Dim strTemp As String
Dim lngLen As Long
If lngPtr Then
lngLen = lstrlenW(lngPtr) * 2
If lngLen Then
strTemp = Space(lngLen)
CopyMemory strTemp, ByVal lngPtr, lngLen
PointerToString = Replace(strTemp, Chr(0), "")
End If
End If
End Function
В итоге возникает проблема. 1. Библиотека говорит, что посылаемые мною команды неверны, хотя они верные. Я думаю, что это из-за кодировки. 2. Возвращаемое значение читается, но порой "выскакивают" лишние символы. Я думаю, что это тоже из-за кодировки.
Есть ли у вас какие-нибудь идеи? Где копать?
Как правильно преобразовывать строку в указатель и обратно? И как кодировать в utf8?
Ответить
|