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
}