Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / GetPrivateProfileString и 64 бита / 5 сообщений из 5, страница 1 из 1
04.06.2015, 10:36
    #38975917
Владимир Саныч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GetPrivateProfileString и 64 бита
Мое почтение всем. Имеется экзешник, написанный на Visual C++ образца 1998 года. В нем есть обращение к функции GetPrivateProfileString. Когда я запускаю этот экзешник под Win 7 (64 bit), это обращение возвращает "пусто". Я сам C++ почти не знаю, но в исходниках нашел вот такую вещь:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
WINBASEAPI
DWORD
WINAPI
GetPrivateProfileStringA(
    LPCSTR lpAppName,
    LPCSTR lpKeyName,
    LPCSTR lpDefault,
    LPSTR lpReturnedString,
    DWORD nSize,
    LPCSTR lpFileName
    );
WINBASEAPI
DWORD
WINAPI
GetPrivateProfileStringW(
    LPCWSTR lpAppName,
    LPCWSTR lpKeyName,
    LPCWSTR lpDefault,
    LPWSTR lpReturnedString,
    DWORD nSize,
    LPCWSTR lpFileName
    );
#ifdef UNICODE
#define GetPrivateProfileString  GetPrivateProfileStringW
#else
#define GetPrivateProfileString  GetPrivateProfileStringA
#endif // !UNICODE


а также

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
#if !defined(_MAC) && (defined(_M_MRX000) || defined(_M_AMD64) || defined(_M_IA64)) && (_MSC_VER >= 1100) && !(defined(MIDL_PASS) || defined(RC_INVOKED))
#define POINTER_64 __ptr64
typedef unsigned __int64 POINTER_64_INT;
#if defined(_WIN64)
#define POINTER_32 __ptr32
#else
#define POINTER_32
#endif
#else
#if defined(_MAC) && defined(_MAC_INT_64)
#define POINTER_64 __ptr64
typedef unsigned __int64 POINTER_64_INT;
#else
#if (_MSC_VER >= 1300) && !(defined(MIDL_PASS) || defined(RC_INVOKED))
#define POINTER_64 __ptr64
#else
#define POINTER_64
#endif
typedef unsigned long POINTER_64_INT;
#endif
#define POINTER_32
#endif


и в другом месте
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
#if !defined(_MAC) && (defined(_M_MRX000) || defined(_M_ALPHA) || defined(_M_IA64)) && (_MSC_VER >= 1100) && !(defined(MIDL_PASS) || defined(RC_INVOKED))
#define POINTER_64 __ptr64
typedef unsigned __int64 POINTER_64_INT;
#if defined(_AXP64_)
#define POINTER_32 __ptr32
#else
#define POINTER_32
#endif
#else
#if defined(_MAC) && defined(_MAC_INT_64)
#define POINTER_64 __ptr64
typedef unsigned __int64 POINTER_64_INT;
#else
#define POINTER_64
typedef unsigned long POINTER_64_INT;
#endif
#define POINTER_32
#endif


Мне интуитивно кажется, что здесь надо что-то исправить или добавить...
...
Рейтинг: 0 / 0
04.06.2015, 11:16
    #38975971
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GetPrivateProfileString и 64 бита
Владимир Саныч,

GetPrivateProfileString читает строку с ключём из реестра или из .ini файла.
Если в вашем ключе, отдаваемом на входе в функцию, лежит пустая строка, или ключа нет вообще, или нет .ini файла (если из него читается) то это нормально, что возврат функции будет пустой.

Так что не понятно, в чём проблема.

Прочитайте внимательно спецификацию на функцию:
https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms724353(v=vs.85).aspx

и проверьте свой код вызова (которого вы сюда не предоставили).

Весь код, что вы послали, к делу не относится.
...
Рейтинг: 0 / 0
04.06.2015, 11:31
    #38975994
Владимир Саныч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GetPrivateProfileString и 64 бита
Код правильный, параметры правильные, всё проверено. Я просто боюсь, что вызывается не та функция (не тот ее вариант по битности).
...
Рейтинг: 0 / 0
04.06.2015, 11:59
    #38976041
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GetPrivateProfileString и 64 бита
Владимир Саныч,

Так давай код.

UNICODE определён в проекте ?
...
Рейтинг: 0 / 0
04.06.2015, 12:12
    #38976062
Владимир Саныч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GetPrivateProfileString и 64 бита
Прошу прощения, всё заработало. У одной переменной таки было не то значение. Тысяча извинений.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / GetPrivateProfileString и 64 бита / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]