Вызов VB6 компонента ActiveX со строковыми параметрами дает странные результаты

В настоящее время я дорабатываю программу, которую начал уже ушедший коллега.

Приложение написано на VB6 и использует сторонний компонент ActiveX для работы со сторонней системой. Наше решение в основном представляет собой интеграцию программного обеспечения их компании и нашего.

Проблема, с которой я столкнулся, заключается в том, что при вызове метода происходит постоянный сбой, даже если он передал совершенно допустимые параметры на нашей стороне (это метод входа в систему). Однако, когда я смотрю на трассировку, предлагаемую их приложением, я вижу, что вместо указанного мной имени пользователя он сообщает мне (примерно) «Пользователь '⚠⚠⚠' не может войти в систему».

Я подумал, что это, скорее всего, проблема с кодировкой, поскольку символ ⚠, заменяющий символы, которые я даю ему для входа, кажется, присутствует, потому что символы неизвестны, но ничего, что я сделал, не смог исправить.

Кто-нибудь знает о проблеме с VB6, взаимодействующей с такими компонентами ActiveX? Или у кого-нибудь есть идеи, что я могу попробовать? Я здесь в растерянности, и если проблема на их стороне, будет сложно исправить ее, поскольку у нас нет их исходного кода.

Заранее спасибо.


person anthonyvd    schedule 02.02.2011    source источник
comment
(1) Пожалуйста, покажите код (по крайней мере, место, где вы передаете строку), (2) это единственный метод со строками, который не работает? Другими словами, есть ли у вас еще один вызов, чтобы сравнить его поведение?   -  person Eugene Mayevski 'Callback    schedule 03.02.2011
comment
Установите objIRC = objRCL.Login (User, pass). Это единственный сбой, но это может быть связано с тем, что никакие другие вызовы не могут выполняться, пока я не вошел в систему.   -  person anthonyvd    schedule 03.02.2011
comment
Невозможно сказать, основываясь на скудной информации. Возможно ли, что ему нужны байтовые массивы символов ANSI вместо строк Unicode?   -  person Bob77    schedule 09.02.2011
comment
У меня была такая проблема некоторое время назад, когда я передавал строку в DLL, написанную на C, чтобы решить ее, мне нужно преобразовать строку в Unicode перед ее передачей, поэтому я думаю, что @BobRiemerma верна.   -  person Matt Wilko    schedule 03.03.2011


Ответы (1)


Есть несколько способов передачи строк. Помимо очевидной передачи строки, как в

DIM u As String
DIM p As String
u = "Username"
p = "Password"
Set objIRC = objRCL.Login(u, p)

также есть вероятность, что .Login ожидает указатели на String, и в этом случае код

Set objIRC = objRCL.Login(StrPtr(u), StrPtr(p))
person bugmagnet    schedule 29.04.2013