|
 Thanks for the reply...
Please find the complete code
<blockquote class="FQ"><div class="FQA">Quote:</div>#include<iostream>
#include <windows.h>
#include <tchar.h>
#include<Iads.h>
#include <ole2.h>
#include "c:\program files\Microsoft Office Communicator\SDK\msgrua.h"
const GUID IID_IMessenger =
{0xD50C3186,0x0F89,0x48f8,{0xB2,0x04,0x36,0x04,0x62,0x9D,0xEE,0x10}};
const GUID CLSID_Messenger =
{0x8885370D,0xB33E,0x44b7,{0x87,0x5D,0x28,0xE4,0x03,0xCF,0x92,0x70}};
const GUID IID_MessengerContacts =
{0xE7479A0F,0xBB19,0x44a5,{0x96,0x8F,0x6F,0x41,0xD9,0x3E,0xE0,0xBC}};
const GUID IID_IEnumVARIANT =
{0x00020404,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}};
IMessenger* m_pIMessenger;
IMessengerContact* GetContact(BSTR bstrSigninName);
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
CoInitialize(NULL);
HRESULT hr = CoCreateInstance(CLSID_Messenger,NULL,CLSCTX_LOCAL_SERVER,
IID_IMessenger, (LPVOID *)&m_pIMessenger);
BSTR myName;
MISTATUS sMyStatus;
hr=m_pIMessenger->get_MySigninName(&myName);
hr = m_pIMessenger->get_MyStatus(&sMyStatus);
BSTR serviceId;
m_pIMessenger->get_MyServiceId(&serviceId);
IDispatch *pContacts;
IMessengerContacts *pCon;
if (FAILED(hr))
return NULL;
hr = m_pIMessenger->GetContact(myName, serviceId,
(IDispatch**)&pCon);
if(FAILED(hr))
{
cout<<"Failed";
}
m_pIMessenger->get_MyContacts(&pContacts);
pContacts->QueryInterface(__uuidof(IMessengerContacts),(void**)&pCon);
long lCount=0;
pCon->get_Count(&lCount);
CoUninitialize();
return 0;
}</blockquote>
Bow here i can see the count..now i want to iterate through each contact ..i am not getting right method to do the same.
vikas da
|
|
|
|
|
tasumisra wrote: now i want to iterate through each contact
Use the Item [^] method.
Note: please use <pre> tags round code not <blockquote>
Unrequited desire is character building. OriginalGriff
I'm sitting here giving you a standing ovation - Len Goodman
|
|
|
|
|
Thanks Rich..
added
IDispatch *ppContacts;
hr=pCon->Item(0,&ppContacts);
after that not getting any clue how to proceed further...any help ..i am just blank...
vikas da
|
|
|
|
|
tasumisra wrote: not getting any clue how to proceed further...any help ..i am just blank.
Well I guess you need to iterate through the list from zero to the maximum value as indicated by the Count property.
Unrequited desire is character building. OriginalGriff
I'm sitting here giving you a standing ovation - Len Goodman
|
|
|
|
|
i tried that as above...
hr=pCon->Item(0,&ppContacts);
now ppContacts seems to be another interface with all COM predefined methods like Querry interface ,addref release etc.
vikas da
|
|
|
|
|
You really need to spend a lot more time reading the documentation on this interface before trying to implement it.
Unrequited desire is character building. OriginalGriff
I'm sitting here giving you a standing ovation - Len Goodman
|
|
|
|
|
Thank you so much Rich.. yes there is a need of going through the documentation.
vikas da
|
|
|
|
|
I want to Convert CString value to Char[100];
Please guide me.
Thanks,
Krishna
|
|
|
|
|
Not sure why char[100] ... ??? ...why not get the size first then allocate the array dynamically?
But, you can use the CString::GetBufferSetLength() (allows you to specify maximum size) method then just copy the contents of the buffer to the char[] using memcpy() .
|
|
|
|
|
For Example i took char[100] As you mentioned i need to take the length of the string.
Thankyou Albert.
|
|
|
|
|
Use strcpy() or its wide character equivalent for the copy. For further information see here[^].
Unrequited desire is character building. OriginalGriff
I'm sitting here giving you a standing ovation - Len Goodman
|
|
|
|
|
Forgot you can use that on a CString... 
|
|
|
|
|
If I had $1 for everything I've forgotten ...
Unrequited desire is character building. OriginalGriff
I'm sitting here giving you a standing ovation - Len Goodman
|
|
|
|
|
LPSTR WideChar2MBCS( const CString& strCS )
{
const UINT wLen = strCS.GetLength() + 1;
UINT aLen = WideCharToMultiByte(CP_ACP,0,strCS,wLen,NULL,0,NULL,NULL);
LPSTR lpa = new char[aLen];
WideCharToMultiByte(CP_ACP,0,strCS,wLen,lpa,aLen,NULL,NULL);
return lpa;
}
maybe this will help you.
myblog is: http://www.cppblog.com/stonexin/archive/2011/12/01/161280.html
|
|
|
|
|
btw,this is unicode project.
|
|
|
|
|
|
CString str = _T( "Test string." );
char pBuffer[ 100 ];
if( sizeof( TCHAR ) == 2 )
WideCharToMultiByte( CP_ACP, 0, ( WCHAR* )str.GetBuffer(), -1, pBuffer, 100, NULL, NULL );
else
{
char* pTemp = ( char* )str.GetBuffer();
memcpy_s( pBuffer, 100, pTemp, strlen( pTemp ) + 1 );
}
|
|
|
|
|
I have a dll COM , I want to convert it to UNICODE.
I readed some documentations about this but I can't get what I should do to be sure that the conversion is done correctly or Not
these are some remarks i have done in my code :
- Use of CString
- char changed by _TCHAR
- char*, LPSTR (Win32 data type) changed by LPTSTR
- const char*, LPCSTR (Win32 data type) changed by LPCTSTR
- USES_CONVERSION macro
- use of std::wstring instead of std::string
- change characters set of project to UNICODE
I don't know if it is sufficient or there are others things to do
And How can I check after conversion if it is Ok or Not.
Thanks for reply.
|
|
|
|
|
You also need to make sure all your string literals ar changed from char to TCHAR with the _T() macro like this:
const char* cp = "Ansi string"; PCTSTR tcp = _T("TCHAR string");
After that, the only way to be certain you have it right is to desk check and test. There may be some free tools around to help verify it but I'm not aware of them; Google may help you.
Unrequited desire is character building. OriginalGriff
I'm sitting here giving you a standing ovation - Len Goodman
|
|
|
|
|
If that was you who downvoted my answer, I'd be interested to know why.
Unrequited desire is character building. OriginalGriff
I'm sitting here giving you a standing ovation - Len Goodman
|
|
|
|
|
sorry for that, I thought to click on 5, not to worry
Just question please :
If I change the Option "Character Set" to "Use Unicode Character Set" and compile
If there is no error can we say that the version compiled without error is UNICODE now or not ?
|
|
|
|
|
khaliloenit wrote: If there is no error can we say that the version compiled without error is UNICODE now or not ?
Unfortunately no. The compiler should weed out most of the anomalies as it will reject a char where a WCHAR is required, but you still need to do all the things you mentioned in your original message and check the things I suggested. Your project is now probably Unicode but you must still check that you have not missed anything, and test it thoroughly. For example if you have something like:
char* charP = "Hello, World";
that is perfectly legal code in a Unicode program but it may not be what you want.
Unrequited desire is character building. OriginalGriff
I'm sitting here giving you a standing ovation - Len Goodman
|
|
|
|
|
What about :
unsigned char
unsigned char*
unsigned char const*
char **
in UNICODE ? By what we can replace them ?
|
|
|
|
|
You would normally replace all of them by WCHAR (TCHAR defaults to WCHAR in a Unicode compilation). However, you first need to look at the context to see what the variables are being used for.
Unrequited desire is character building. OriginalGriff
I'm sitting here giving you a standing ovation - Len Goodman
|
|
|
|
|
See an other problem please :
I have this table of char (NO UNICODE):
const char sm_S[8] = {9, 124, 119, 123, -14, 107, 111, -59};
and I want to work with it now on UNICODE : I convert it to
const TCHAR sm_S[8] = {9, 124, 119, 123, -14, 107, 111, -59};
But when I do like this :
TCHAR MyChar = sm_S[4]; this should be "-14" but I have an other value like "54265"
What do you think about this and have you idea to solve this problem?
|
|
|
|
|