Improve company productivity with a Business Account.Sign Up

x
?
Solved

byte to const char * conversion error

Posted on 2009-07-15
3
Medium Priority
?
2,306 Views
Last Modified: 2013-12-14

I have the function below.  It fails to compile with the following error:
u:\myDll\WinNetTools.c(151): error C2664: 'strlen' : cannot convert parameter 1 from 'BYTE [20]' to 'const char *'

The error is referring to this line:
   int iPos = strlen(psClientAddr->Address) == 4 ? 0 : 2;
   char* pszIP = inet_ntoa(*((struct in_addr *)(&psClientAddr->Address[iPos])));


Can anyone tell me what I'm doing wrong?
int GetRemoteIP(const DWORD dwASessionID, char* pszIPBuff)
{
	int rc = FALSE;
	LPTSTR pszBuffer = NULL;
	DWORD dwBytes = 0;
 
	if (WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, dwASessionID, WTSClientAddress, &pszBuffer, &dwBytes)) {
 
		WTS_CLIENT_ADDRESS* psClientAddr = (WTS_CLIENT_ADDRESS *)pszBuffer;
		if (psClientAddr->AddressFamily == AF_INET) {
 
			/* if the return addr contains a port, ignore the port */
			int iPos = strlen(psClientAddr->Address) == 4 ? 0 : 2;
			char* pszIP = inet_ntoa(*((struct in_addr *)(&psClientAddr->Address[iPos])));
			if (pszIP) {
				strncpy(pszIPBuff, pszIP, MAX_IPADDR_LENGTH);
				pszIPBuff[MAX_IPADDR_LENGTH] = 0;
				rc = TRUE;
			}
		}
		WTSFreeMemory(pszBuffer);
	}
	pszIPBuff[MAX_IPADDR_LENGTH] = '\0';
	return rc;
}

Open in new window

0
Comment
Question by:dhenderson12
2 Comments
 
LVL 14

Accepted Solution

by:
flob9 earned 1000 total points
ID: 24865031
This should work :

int iPos = strlen((char*)psClientAddr->Address) == 4 ? 0 : 2;
0
 
LVL 39

Assisted Solution

by:itsmeandnobodyelse
itsmeandnobodyelse earned 1000 total points
ID: 24868512
To add to above information:

The psClientAddr->Address seems to be a 'unsigned char[20]' type. The compiler refuses to convert that to a 'const char*' cause unsigned char or BYTE type normally doesn't describe a zero-terminated string as it was with const char*.

Casting the unsigned char array to char* may help out of this (what simply tells the compiler not to care for the type difference)though I have doubts.  Why is the Address member an unsigned char array if it is a zero-terminated string?
0

Featured Post

Get expert help—faster!

Need expert help—fast? Use the Help Bell for personalized assistance getting answers to your important questions.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

In Easy String Encryption Using CryptoAPI in C++ (http://www.experts-exchange.com/viewArticle.jsp?aid=1193) I described how to encrypt text and recommended that the encrypted text be stored as a series of hexadecimal digits -- because cyphertext may…
Jaspersoft Studio is a plugin for Eclipse that lets you create reports from a datasource.  In this article, we'll go over creating a report from a default template and setting up a datasource that connects to your database.
This tutorial covers a step-by-step guide to install VisualVM launcher in eclipse.
The viewer will learn how to use NetBeans IDE 8.0 for Windows to connect to a MySQL database. Open Services Panel: Create a new connection using New Connection Wizard: Create a test database called eetutorial: Create a new test tabel called ee…

589 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question