Форум программистов, компьютерный форум, киберфорум
Pure Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707

Передача unicode строки в библиотеку VB

27.01.2015, 13:10. Показов 1872. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Поменял в проекте кодировку на Unicode. Теперь библиотека VB принимает пустые строки.
Что можно сделать?
Может как-то передавать строку в обычной кодировке? Но такой способ в самом PB дает пустую строку:
PureBasic
1
2
Text.s = "Текст"
Text2.s = PeekS(@*Text, -1, #PB_Unicode)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.01.2015, 13:10
Ответы с готовыми решениями:

Передача Unicode-строки в функцию по ссылке
Добрый день, товарищи форумчане. Я столкнулся с такой вот задачей: Есть некая функция, например, void FindFile(LPCWSTR Dir, LPCWSTR...

Передача Unicode-строки через сокет. Видимо что-то случилось...
Добрый день! Пытаюсь написать простенькое клиент-серверное приложение - сервер слушает какой-либо порт, и, при подключении клиента...

Передача объекта в библиотеку
У меня в проге есть форма и библиотека, на форме расположен грид VSFlexgrid. Библиотека отвечает за поиск внутри грида. Так вот, при...

12
Эксперт по электронике
6827 / 3252 / 337
Регистрация: 28.10.2011
Сообщений: 12,709
Записей в блоге: 7
27.01.2015, 13:25
Если проект юникодный, то строку не нужно перекодировать, ведь она и так в юникоде. Возможно в VB какие-то нестандартные юникодные стоки. Возможно BSTR. PB поддерживает этот тип строки (в прототипах, интерфейсах и импорте) через псевдотип p-bstr.
1
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
27.01.2015, 14:22  [ТС]
locm, не понятно. Что делать с этим? Как мне передать строку p-bstr, как вообще создать такую переменную? Если в примере по вашей ссылке всего лишь импорт готовой функции. По моему, этот пример вообще бесполезен.

До этого я пользовался функцией, для преобразования в bstr:
PureBasic
1
2
3
4
5
6
7
8
9
10
Procedure.l ansi2bstr(ansi.s)
  size.l=MultiByteToWideChar_(#CP_ACP,0,ansi,Len(ansi),0,0)
  Dim unicode.w(size)
  MultiByteToWideChar_(#CP_ACP, 0, ansi, Len(ansi), unicode(), size);#CP_ACP
  For i=0 To size
        tmp.s + Hex(unicode(i),#PB_Unicode)
        Next
  ;MessageRequester(Str(size), tmp )
  ProcedureReturn SysAllocString_(@unicode())
EndProcedure
А как её переделать под юникод?
0
Эксперт по электронике
6827 / 3252 / 337
Регистрация: 28.10.2011
Сообщений: 12,709
Записей в блоге: 7
27.01.2015, 14:30
Цитата Сообщение от Randen Посмотреть сообщение
всего лишь импорт готовой функции.
Разве из библиотеки на VB не импортируется функция?
Покажите код вызова этой функции.
1
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
27.01.2015, 14:32  [ТС]
locm, кажется понял. Я вызваю Call методом. Но щас что-нибудь придумаю)
0
Эксперт по электронике
6827 / 3252 / 337
Регистрация: 28.10.2011
Сообщений: 12,709
Записей в блоге: 7
27.01.2015, 14:41
Нужно вызывать через прототип.
1
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
27.01.2015, 14:45  [ТС]
Не получается.
PureBasic
1
2
3
Import "тут полный путь до *.lib файла"
  DocumentOpen(Word.l, Path.p-bstr)
EndImport
Пишет ошибку unresolved external symbol '_DocumentOpen'
0
Эксперт по электронике
6827 / 3252 / 337
Регистрация: 28.10.2011
Сообщений: 12,709
Записей в блоге: 7
27.01.2015, 14:50
Возможно в lib-файле другое имя у функции. Его нужно открыть в каком-то hex-просмоторщике (в крайнем случае, перетащить lib-файл в окно редактора PB) и посмотреть какое у функции имя.
1
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
27.01.2015, 14:53  [ТС]
locm, а можно вместо импорта прототип использовать?
0
Эксперт по электронике
6827 / 3252 / 337
Регистрация: 28.10.2011
Сообщений: 12,709
Записей в блоге: 7
27.01.2015, 14:58
Можно.
PureBasic
1
2
3
4
5
Prototype DocumentOpen(Word.l, Path.p-bstr)
If OpenLibrary(0, "VB_Lib.dll")
  DocumentOpen.DocumentOpen = GetFunction(0, "DocumentOpen")
  DocumentOpen(0, "С:\1234.doc")
EndIf
1
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
27.01.2015, 15:09  [ТС]
Хорошо. Но таким образом функция даже не начинает выполняться. Всё из-за типа p-bstr. Функция принимает String.
В чём может быть проблема?

Добавлено через 4 минуты
"не начинает выполняться" это я подразумевал что выдает ошибку)
0
Эксперт по электронике
6827 / 3252 / 337
Регистрация: 28.10.2011
Сообщений: 12,709
Записей в блоге: 7
27.01.2015, 15:14
Цитата Сообщение от Randen Посмотреть сообщение
Функция принимает String.
Для начала нужно выяснить какой формат строки в VB6.
1
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
27.01.2015, 16:14  [ТС]
locm, скорее всего bstr. Т.к. эта функция:
PureBasic
1
2
3
4
5
6
7
8
9
10
Procedure.l ansi2bstr(ansi.s)
  size.l=MultiByteToWideChar_(#CP_ACP,0,ansi,Len(ansi),0,0)
  Dim unicode.w(size)
  MultiByteToWideChar_(#CP_ACP, 0, ansi, Len(ansi), unicode(), size);#CP_ACP
  For i=0 To size
        tmp.s + Hex(unicode(i),#PB_Unicode)
        Next
  ;MessageRequester(Str(size), tmp )
  ProcedureReturn SysAllocString_(@unicode())
EndProcedure
при кодировке Ansi, выручала.

Добавлено через 58 минут
Всё, разобрался. Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.01.2015, 16:14
Помогаю со студенческими работами здесь

Передача констант через динамически подгружаемую библиотеку
Всем привет! Создал LS-библиотеку, общую для нескольких баз системы. Специфику же каждой базы определил через константы в персональной...

Unicode - указатели на строки
Добрый день! Работаю в VS 2010. Для начала приведу вырезку из кода: void Rational::errorMsg() const { ...

Сохранить строки в Unicode
Здравствуйте! Подскажите как сохранить две строки (String str, str_2) в файл в Unicode. Так вот пробую OutputStreamWriter pw...

Сменить кодировку строки на Unicode
Ребят, подскажите, каким образом это делается? $str = "asdfasdf"; Как ее в unicode преобразовать?

Как выводить строки в unicode?
почему не выводит на экран строки в формате unicode? в win32 прикрасно работает, а в консоле не выводит... #include <iostream> ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Настройка записи справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru