SQLGetPrivateProfileString читает символы Unicode неправильно - PullRequest
2 голосов
/ 17 апреля 2019

Я использую в SQLGetPrivateProfileString для чтения параметров DSN из odbcinst.ini (Реестр).

Но если я использую символы типа UID='König' в DSN и вызываю

SQLGetPrivateProfileString(DSN, INI_USERNAME, "", temp, sizeof(temp), ODBC_INI)

переменная temp='K?nig'

Естественно, odbc не может подключиться к источнику данных.Как правильно читать значения?

1 Ответ

3 голосов
/ 17 апреля 2019

Необходимо вызвать версию функции в Юникоде, которая равна SQLGetPrivateProfileStringW.См. этот документ Microsoft

Если приложение скомпилировано с помощью _UNICODE #define, заголовочный файл ODBC сопоставит вызовы функций без декорации с версией Unicode.

и этот

Вы можете перекомпилировать приложение как приложение Unicode одним из двух способов:

  • Включить содержащий Unicode #defineв заголовочном файле Sqlucode.h в приложении.
  • Скомпилируйте приложение с параметром Unicode компилятора.(Эта опция будет отличаться для разных компиляторов.)

См. odbcinst.h :

#ifdef  UNICODE
...
#define  SQLGetPrivateProfileString     SQLGetPrivateProfileStringW
...

, где SQLGetPrivateProfileStringW объявлено как:

int  INSTAPI SQLGetPrivateProfileStringW
(
    _In_opt_ LPCWSTR lpszSection,
    _In_opt_ LPCWSTR lpszEntry,
    _In_opt_ LPCWSTR lpszDefault,
    _Out_writes_opt_(cchRetBuffer) LPWSTR lpszRetBuffer,
    int              cchRetBuffer,
    _In_opt_ LPCWSTR lpszFilename
);

Unicode-версия функции получает LPCWSTR и LPWSTR, которые являются указателями на строку из 16-битных символов Unicode.Какая бы другая функция ни получала эти значения, она также должна быть версией Unicode.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...