C++ API Convert LNString to char *

I am a new user to notes C++ API.

In a DLL I would like to read the name of an Agent. In general I can do this but it get back not readable chars. This are an example I found on the Net but it doesn’t work.

Please guide me how I can convert a LNString to char *.

My code are:

char * GetName(char * dbName, char * agName)

{

LNNotesSession	session;

session.Init();



LNDatabase db;

	

LNSetThrowAllErrors(TRUE);

try

{

	LNAgent   agent;

	LNString  agNameAsLNString;

	char *	  agNameAsChar;

							

	session.GetDatabase(dbName, &db);

	db.Open();

	

	if(db.AgentExists(agName))

		db.GetAgent(agName, &agent);

		

	agent.Open();

	agNameAsLNString = agent.GetName();

	agNameAsChar = agNameAsLNString.GetTextPtr();

	

	return(agNameAsChar);

}	

catch (LNSTATUS error)

{

	session.Term();

	return("Error");

}

}

Thanks in advance.

Toni

Subject: C++ API Convert LNString to char *

I also had unreadable characters returned until I opened the database correctly using:

session.GetDatabase(filename, &db, server);

where “filename” and “server” are the respective database filename and name of server.

The GetTextPtr() should then work ok to convert the LNString to char*.

Hope that helps.

Subject: C++ API Convert LNString to char *

Use LNStringTranslate:

inline LNStringToCString(const LNString& lns, CString * pStr)

{

#ifdef UNICODE

DWORD dwSize = lns.GetLength() * sizeof(TCHAR) + 1;

LNStringTranslate(lns, LNCHARSET_UNICODE, dwSize, pStr->GetBuffer(dwSize));

pStr->ReleaseBuffer(lns.GetLength());

#else

(* pStr) = (LPCTSTR) lns;

#endif

}

inline StringToLNString(LPCTSTR pszString, LNString * plns)

{

#ifdef UNICODE

LNStringTranslate(pszString, LNCHARSET_UNICODE, plns);

#else

* plns = (LPCTSTR) pszString;

#endif

}

-dB.

Subject: RE: C++ API Convert LNString to char *

Hi Daniel

Thank you for your answer. But as I wrote I’m new in C++ and I don’t understand to use your idea. Maybe you can show me how I have to implement your code into my code.

Thanks a lot

Toni

Subject: RE: C++ API Convert LNString to char *

All you need to do is copy-paste these functions and then you can call them.

LNString lnstringFoo;

CString stringFoo;

LNStringToCString(lnstringFoo, & stringFoo);

to get char * from stringFoo, simply do (char *) stringFoo;

There’s a bug in my code. So fixed version goes:

inline LNStringToCString(const LNString& lns, CString * pStr)

{

#ifdef UNICODE

LNINT nBufferLen = lns.GetLength() * sizeof(TCHAR) + 1;

LNStringTranslate(lns, LNCHARSET_UNICODE, nBufferLen, (LPVOID) pStr->GetBuffer(nBufferLen));

pStr->ReleaseBuffer(lns.GetLength());

#else

(* pStr) = (LPCTSTR) lns;

#endif

}

inline StringToLNString(LPCTSTR pszString, LNString * plns)

{

#ifdef UNICODE

LNStringTranslate((LPVOID) pszString, LNCHARSET_UNICODE, plns);

#else

* plns = (LPCTSTR) pszString;

#endif

}