Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.07.2018, 13:27   #1
sasha_prof
Форумчанин
 
Регистрация: 06.01.2010
Сообщений: 292
По умолчанию MultiByteToWideChar

Ребята помогите пожалуйста разобраться.
В 64 бит офисе 2016 ругается на строку
Код:
L = MultiByteToWideChar(CP_UTF8, 0, src(0), UBound(src) + 1, StrPtr(dst), 0)
Код следующий...
Код:
Option Explicit

Private Declare PtrSafe Function WideCharToMultiByte Lib "kernel32" ( _
    ByVal CodePage As Long, _
    ByVal dwFlags As Long, _
    ByVal lpWideCharStr As LongPtr, _
    ByVal cchWideChar As Long, _
    ByVal lpMultiByteStr As LongPtr, _
    ByVal cbMultiByte As Long, _
    ByVal lpDefaultChar As LongPtr, _
    ByVal lpUsedDefaultChar As LongPtr) As LongPtr
    
Private Const CP_UTF8 = 65001


Public Sub fromXML_Any_Long(file)
    Dim src() As Byte, dst As String, L As LongPtr
    
    Open file For Binary As #1
    ReDim src(LOF(1) - 1)
    Get 1, , src
    Close 1
    
    L = MultiByteToWideChar(CP_UTF8, 0, src(0), UBound(src) + 1, StrPtr(dst), 0)
    
    
    dst = Space(L)

    Call MultiByteToWideChar(CP_UTF8, 0, src(0), UBound(src) + 1, StrPtr(dst), L)
End Sub
sasha_prof вне форума Ответить с цитированием
Старый 20.07.2018, 13:35   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Какими словами ругается?
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 20.07.2018, 13:55   #3
sasha_prof
Форумчанин
 
Регистрация: 06.01.2010
Сообщений: 292
По умолчанию

прикрепил...
Вложения
Тип файла: rar Err.rar (205.4 Кб, 17 просмотров)
sasha_prof вне форума Ответить с цитированием
Старый 20.07.2018, 14:02   #4
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

А где реализация MultiByteToWideChar?
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 20.07.2018, 14:06   #5
sasha_prof
Форумчанин
 
Регистрация: 06.01.2010
Сообщений: 292
По умолчанию

Точно.... Тупанул.
Перейменовал. Но теперь пишет "Argumet not optional"


Код:
Private Declare PtrSafe Function MultiByteToWideChar Lib "kernel32" ( _
    ByVal CodePage As Long, _
    ByVal dwFlags As Long, _
    ByVal lpWideCharStr As LongPtr, _
    ByVal cchWideChar As Long, _
    ByVal lpMultiByteStr As LongPtr, _
    ByVal cbMultiByte As Long, _
    ByVal lpDefaultChar As LongPtr, _
    ByVal lpUsedDefaultChar As LongPtr) As LongPtr
sasha_prof вне форума Ответить с цитированием
Старый 20.07.2018, 14:13   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Ну посчитайте сколько параметров в объявлении и сколько в вызове.
p51x на форуме Ответить с цитированием
Старый 20.07.2018, 14:16   #7
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Гугл говорит что декларация такая
Код:
Private Declare Function MultiByteToWideChar Lib "kernel32" _ (
ByVal CodePage As Long, 
ByVal dwFlags As Long, _ 
ByVal lpMultiByteStr As String, 
ByVal cchMultiByte As Long, _
ByVal lpWideCharStr As String, 
ByVal cchWideChar As Long) As Long
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 20.07.2018, 14:20   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

А это с WideCharToMultiByte взял 8 параметров... У ТС по всей теме путаница, то одна функция, то другая.
p51x на форуме Ответить с цитированием
Старый 20.07.2018, 14:23   #9
sasha_prof
Форумчанин
 
Регистрация: 06.01.2010
Сообщений: 292
По умолчанию

Вроде идет без ошибок. Но автоматически вырубает аксес на строке

Код:
Call MultiByteToWideChar(CP_UTF8, 0, src(0), UBound(src) + 1, StrPtr(dst), L)
Тот код что вы дали адаптировал под 64 бит

Код:
Private Declare PtrSafe Function MultiByteToWideChar Lib "kernel32" ( _
    ByVal CodePage As LongPtr, _
    ByVal dwFlags As LongPtr, _
    ByVal lpMultiByteStr As String, _
    ByVal cchMultiByte As LongPtr, _
    ByVal lpWideCharStr As String, _
    ByVal cchWideChar As LongPtr) As LongPtr
sasha_prof вне форума Ответить с цитированием
Старый 22.07.2018, 13:44   #10
sasha_prof
Форумчанин
 
Регистрация: 06.01.2010
Сообщений: 292
По умолчанию

разорался, не правильно форматы определил.
Код:
Private Declare PtrSafe Function MultiByteToWideChar Lib "kernel32" ( _
    ByVal CodePage As LongPtr, _
    ByVal dwFlags As LongPtr, _
    lpMultiByteStr As Any, _
    ByVal cchMultiByte As LongPtr, _
    ByVal lpWideCharStr As LongPtr, _
    ByVal cchWideChar As LongPtr) As LongPtr
Спасибо кто натолкнул на правильную мысль
sasha_prof вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Завершает ли MultiByteToWideChar строку терминальным нолём? taras-proger Win Api 9 02.12.2015 22:41