Как вызвать метод со строкой и параметром, используя char *? - PullRequest
1 голос
/ 23 июня 2010

У меня есть C ++ dll от другой компании. есть метод с параметром string & msg, void methodA(string& msg);

Теперь у меня есть символ * с длиной, которая достаточно велика, чтобы взять сообщение из метода A. Я хочу вызвать methodA, чтобы получить сообщение от methodA.

Могу ли я это сделать? как? спасибо,

Ответы [ 4 ]

4 голосов
/ 23 июня 2010
#include <algorithm>

void foo(char* buffer)
{
    std::string str;
    methodA(str);
    std::copy(str.begin(), str.end(), buffer);
    buffer[str.size()] = 0;
}
3 голосов
/ 23 июня 2010

Похоже, вам нужно будет использовать шаблон, как это.Неясно, является ли параметр входным / выходным или просто выходным параметром.Так что вам понадобится один из них ...

ВХОД / ВЫХОД:

const char s[BIG_ENOUGH] = "whatever";
std::string str(s);
methodA(str);
// str should now have the response according to your API description

ВНЕ:

std::string str;
methodA(str);
// str should now have the response according to your API description

// if you need to result in `s`...
strncpy(s, str.c_str(), BIG_ENOUGH);
s[BIG_ENOUGH - 1] = '\0'; // just to be safe
2 голосов
/ 23 июня 2010

Создайте строку из вашего символа * и передайте ее методу А. Вот как я это сделаю.

Не уверен, что вы ищете здесь.

Примечание: О, я вижу это. Заняло у меня минуту.

std::string my_msg;
methodA(my_msg);
strcpy(my_char_star, my_msg.c_str());

Я должен сказать, что это, в сущности, полная противоположность тому типу кода, который вы должны писать. Вы должны использовать std :: string или std :: vector для предоставления аргументов буфера char *, а не char * для замены std :: string.

1 голос
/ 23 июня 2010

Да, вы можете.

#include <string>

void yourfunc( char * mymsg, int len ) {
  string msg;
  methodA(msg);
  if( msg.length() < len ) {
    strncpy( mymsg, msg.c_str(), len );
  } else { // FAIL }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...