Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Проблемы со строковой переменной.


Автор: Dimonchik 27.11.2005, 23:26
Привет всем!
Подскажите, пожалуйста, что нужно сделать для того, чтобы переменная inBuf в ниже описанном листинге содержала в себе полную строку, а не первый символ строки, потому что у меня всё время на экран выдаётся "С", т.е. первый символ??? В данный момент я пользуюсь Visual Studio 2005 (Beta 2).
Буду очень признателен, если подскажете в чём проблема.

Код

#include "stdafx.h"
#include "windows.h"
#include "stdio.h"
#include "iostream"
using namespace std;

int main()
{
     CHAR inBuf[MAX_PATH];

     GetPrivateProfileString(
              TEXT("Configuration"),
              TEXT("InstallDir"),
              TEXT(""),
              (LPWSTR)inBuf,
              MAX_PATH,
              TEXT("test.ini"));

     cout << inBuf;
    
     return 0;
}

Автор: Aleksandor 28.11.2005, 10:52
У тебя в четвертом параметре стоит LPWSTR, а фунцция просит LPTSTR, да и буфер объявлен как CHAR

Автор: Neitron 28.11.2005, 11:12
Чтобы было меньше путаниц, сразу вызывай
GetPrivateProfileStringW

Автор: Dimonchik 28.11.2005, 13:24
"У тебя в четвертом параметре стоит LPWSTR, а фунцция просит LPTSTR, да и буфер объявлен как CHAR "

Какой же тогда тип переменной использовать для буфера? Я уже пробовал и CHAR и TCHAR...
Всё равно строка не выводится, а мне нужно, чтобы функция GetPrivateProfileString() возвращала строку посредством inBuf, а не двоичные данные или ещё Бог знает что...

Автор: Aleksandor 28.11.2005, 14:12
А прога в Unicode откомпилирована?
Тогда бери TCHAR для буфера и возможно необходимо конвертировать перед выводом широкую строку в обычную (не Unicode) функцией WideCharToMultiByte

DWORD dwCount=GetPrivateProfileString(..... возвращает сколько символов?

еще можно попробовать вместо пустой строки (третий параметр) использовать что-то типа
"Requested string is not found"

Автор: Neitron 28.11.2005, 18:02
Код

#include "stdafx.h"
#include "windows.h"
#include "stdio.h"
#include "iostream"
using namespace std;
int main()
{
    char inBuf[MAX_PATH];
     GetPrivateProfileStringA(
              "Configuration",
              "InstallDir",
              "",
              inBuf,
              MAX_PATH,
              "test.ini");
     cout << inBuf;
    
     return 0;
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)