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


Автор: nt100 5.6.2008, 11:35
Привет

хочется обойтись без char* в программе и использовать только stl
но как передать string в winapi функцию к-рая требует char* например GetDlgItemText ?



Автор: Mayk 5.6.2008, 11:36
Написать обёртки, которые будут получать std::string и из них передавать в WinAPI char*'ы.

Автор: mrbrooks 5.6.2008, 11:37
Код

string str;
str.c_str(); //вместо char *

Автор: nt100 5.6.2008, 11:46
я имею в виду на запись. т.е. если параметер типа __out LPTSTR

Автор: bsa 5.6.2008, 11:53
тут было неправильно

Автор: Mayk 5.6.2008, 11:56
если я правильно понял, то примерно так
Код

#include <windows.h>
#include <string>
#include <iostream>


std::string getWindowText(HWND hwnd) // ну или использовать std::string& для возвращения out параметра
{
    char buffer[64000];
    int usedBuffer = GetWindowTextA(hwnd,buffer,sizeof(buffer));
    return std::string(buffer,buffer+usedBuffer);
}

int main()
{
    std::cout << getWindowText(GetForegroundWindow());
}


идея думаю ясна.

Автор: nt100 5.6.2008, 12:17
то есть на каждую функцию свою обертку писать
а по другому никак?

Автор: Lazin 5.6.2008, 12:36
лучше написать, иначе можно нарушить целостность контейнера
минимизируй использование голого API,  и будет тебе счастье 

Автор: Mayk 5.6.2008, 13:08
Цитата(nt100 @  5.6.2008,  16:17 Найти цитируемый пост)
то есть на каждую функцию свою обертку писать
а по другому никак? 

Можешь поискать в инете, может есть что. Я как-то искал, мне не попалось. В нете есть некоторые схожие либы(по враппингу именно winapi), но они относительно тяжеловесны.

Автор: Rififi 5.6.2008, 13:53
Цитата(nt100 @  5.6.2008,  12:17 Найти цитируемый пост)
то есть на каждую функцию свою обертку писать
а по другому никак? 

всё уже написали за тебя.
http://winstl.org/

Автор: nt100 6.6.2008, 11:08
всем спасибо

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