我在SQLGetPrivateProfileString
中使用它来从odbcinst.ini
(注册表)中读取DSN参数。
但是如果我在DSN中使用UID='König'
之类的字符并调用
SQLGetPrivateProfileString(DSN, INI_USERNAME, "", temp, sizeof(temp), ODBC_INI)
变量temp='K?nig'
自然,odbc无法连接到数据源。 如何读取正确的值?
答案 0 :(得分:3)
该函数的Unicode版本需要调用,即SQLGetPrivateProfileStringW
。
参见this Microsoft doc
如果使用_UNICODE编译应用程序,请#define ODBC 头文件会将未修饰的函数调用映射到Unicode 版本。
您可以通过以下两种方式之一将应用程序重新编译为Unicode应用程序:
- 在应用程序的Sqlucode.h头文件中包含Unicode #define。
- 使用编译器的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版本。