2015-07-31 1 views
2

нужно использовать следующую функцию, но я в беде с аргументами:C++ указатель функции некорректных типам

В этом случае IP-адрес не заходящий.

cwbCO_SysHandle system; 
LPSTR ipAddress = ""; 
ULONG ipLength = 32; 
cwbCO_GetIPAddress(system, ipAddress, &ipLength); 

Я знаю, что нужно передать указатель на LPSTR в качестве аргумента, но установив следующий код не работает либо:

cwbCO_SysHandle system; 
LPSTR ipAddress = ""; 
ULONG ipLength = 32; 
cwbCO_GetIPAddress(system, &ipAddress, &ipLength); //Incompatible types LPSTR* and LPSTR 

Что такое правильный способ?

Синтаксис

UINT CWB_ENTRY cwbCO_GetIPAddress (система cwbCO_SysHandle, LPSTR IPAddress, длина PULONG);

Параметры

cwbCO_SysHandle система - вход

Handle that previously was returned by cwbCO_CreateSystem or cwbCO_CreateSystemLike. It is the 
IBM i identification. 

LPSTR IPAddress - выход

Pointer to a buffer that will contain the NULL-terminated IP address in dotted-decimal notation (in 
the form "nnn.nnn.nnn.nnn" where each "nnn" is in the range of from 0 to 255). 

PULONG длина - вход/выход

Pointer to the length of the IPAddress buffer. If the buffer is too small to hold the output, including 
room for the terminating NULL, the size of the buffer 
+0

Удалить амперсанд, скорее всего, LPSTR уже является typedef, который является указателем. – v010dya

ответ

4

Я нашел документации, cwbCO_GetIPAddress

Соответствующая часть здесь (курсив добавлен):

LPSTR IPAddress - выход Указатель на буфер, который будет содержать NULL завершающим IP-адрес в (в форме «nnn.nnn.nnn.nnn», где каждый «nnn» находится в диапазоне от 0 до 255).

Так что ваш код должен выглядеть следующим образом:

cwbCO_SysHandle system; 
char ipAddress[32]; //A buffer, not a pointer! 
ULONG ipLength = 32; 
cwbCO_GetIPAddress(system, ipAddress, &ipLength); 

Кроме того, убедитесь, что вы инициализировать system с cwbCO_CreateSystem или cwbCO_CreateSystemLike.

+0

Я получаю странные символы в буфере символов. Как я могу сделать буфер 'char' разборчивым? Я имею в виду, преобразовать его в строку. Я попробовал строку str = string (ipAddress); Но строка пуста. Я также попробовал 'stringstream', но он продолжает показывать странные символы. – ProtectedVoid

+0

@ProtectedVoid вы инициализировали свою 'систему'? Вы проверяли возвращаемое значение из 'cwbCO_GetIPAddress'? – crashmstr

+0

Хорошо, cwbCO_SysHandle ошибался. Функция cwbCO_CreateSystem устанавливает указатель cwbCO_SysHandle, и я использовал обработчик указателя. Мне нужно было использовать обработчик, используемый для создания системы. Благодарю. – ProtectedVoid