PC Review Forums Newsgroups Microsoft DotNet Microsoft Dot NET Compact Framework Unmanage string convert into manage string

Reply

Unmanage string convert into manage string

 
Thread Tools Rate Thread
Old 06-03-2007, 06:41 PM   #1
=?Utf-8?B?amVmZg==?=
Guest
 
Posts: n/a
Default Unmanage string convert into manage string


Hi Guys,

I have read a string from Unmanaged code, however, when I convert ptr to
string.
It also include "\r\n" in the string, how to avoid this issue:

here is my source code:
IntPtr m_pMessge = new IntPtr(0);

// this call native code [dll file]
ReplayForm(ref m_pMessge,this.E_User,this.E_Password);
//convert pointer to object string
string strMessage = Marshal.PtrToStringBSTR(m_pMessge);
/*****
after it has been converted, it holds \r\n ""
*/
strMessage = strMessage.Replace(@"=\r\n", @"\r\n");

Thanks


  Reply With Quote
Old 06-03-2007, 09:21 PM   #2
Guest
 
Posts: n/a
Default Re: Unmanage string convert into manage string

I'd want to see the native code that it calls.


--
Chris Tacke - Embedded MVP
OpenNETCF Consulting
Managed Code in the Embedded World
www.opennetcf.com
--




"jeff" <jeff@discussions.microsoft.com> wrote in message
news:2B5EB157-0C5D-49C0-BC09-97D71923C72A@microsoft.com...
> Hi Guys,
>
> I have read a string from Unmanaged code, however, when I convert ptr to
> string.
> It also include "\r\n" in the string, how to avoid this issue:
>
> here is my source code:
> IntPtr m_pMessge = new IntPtr(0);
>
> // this call native code [dll file]
> ReplayForm(ref m_pMessge,this.E_User,this.E_Password);
> //convert pointer to object string
> string strMessage = Marshal.PtrToStringBSTR(m_pMessge);
> /*****
> after it has been converted, it holds \r\n ""
> */
> strMessage = strMessage.Replace(@"=\r\n", @"\r\n");
>
> Thanks
>
>



  Reply With Quote
Old 06-03-2007, 09:58 PM   #3
=?Utf-8?B?amVmZg==?=
Guest
 
Posts: n/a
Default Re: Unmanage string convert into manage string


here is some code:

DLLEXPORT bool ReplayForm(BSTR* bt,LPTSTR szUser,LPTSTR szPassword)
{
CLogger::Record(L"ReplayForm");
if(!SyncService(szUser,szPassword))
return false;
int i = 0;
while(!TrackMessage(bt))
{
i++;
if(!SyncService(szUser,szPassword))
break;
Sleep(5000);
if(i > 120)
break;
};
return true;
}

bool TrackMessage(BSTR* bt)
{
//here I have not put my actual code, since it is too complicated.
//in fact, save all the string to CString instance, and then
CString strMessage ="some long string which hold return";
*bt = ::SysAllocString(strMessage.GetBuffer(strMessage.GetLength()));
return true;
}

Thanks.



"<ctacke/>" wrote:

> I'd want to see the native code that it calls.
>
>
> --
> Chris Tacke - Embedded MVP
> OpenNETCF Consulting
> Managed Code in the Embedded World
> www.opennetcf.com
> --
>
>
>
>
> "jeff" <jeff@discussions.microsoft.com> wrote in message
> news:2B5EB157-0C5D-49C0-BC09-97D71923C72A@microsoft.com...
> > Hi Guys,
> >
> > I have read a string from Unmanaged code, however, when I convert ptr to
> > string.
> > It also include "\r\n" in the string, how to avoid this issue:
> >
> > here is my source code:
> > IntPtr m_pMessge = new IntPtr(0);
> >
> > // this call native code [dll file]
> > ReplayForm(ref m_pMessge,this.E_User,this.E_Password);
> > //convert pointer to object string
> > string strMessage = Marshal.PtrToStringBSTR(m_pMessge);
> > /*****
> > after it has been converted, it holds \r\n ""
> > */
> > strMessage = strMessage.Replace(@"=\r\n", @"\r\n");
> >
> > Thanks
> >
> >

>
>
>

  Reply With Quote
Old 06-03-2007, 10:40 PM   #4
Guest
 
Posts: n/a
Default Re: Unmanage string convert into manage string

All I can say is to check that your TrackMessage isn't putting in newlines
or returns. The system surely doesn't instert them automatically.

And where exactly is the SysFreeString mate to your SysAllocString?
Furthermore why use a BSTR anyway? Are you also interoping with COM? If
not, get rid of it.


--
Chris Tacke - Embedded MVP
OpenNETCF Consulting
Managed Code in the Embedded World
www.opennetcf.com
--




"jeff" <jeff@discussions.microsoft.com> wrote in message
news:E161A2AD-A7E7-4113-A0BE-7EF5A48B65A8@microsoft.com...
>
> here is some code:
>
> DLLEXPORT bool ReplayForm(BSTR* bt,LPTSTR szUser,LPTSTR szPassword)
> {
> CLogger::Record(L"ReplayForm");
> if(!SyncService(szUser,szPassword))
> return false;
> int i = 0;
> while(!TrackMessage(bt))
> {
> i++;
> if(!SyncService(szUser,szPassword))
> break;
> Sleep(5000);
> if(i > 120)
> break;
> };
> return true;
> }
>
> bool TrackMessage(BSTR* bt)
> {
> //here I have not put my actual code, since it is too complicated.
> //in fact, save all the string to CString instance, and then
> CString strMessage ="some long string which hold return";
> *bt = ::SysAllocString(strMessage.GetBuffer(strMessage.GetLength()));
> return true;
> }
>
> Thanks.
>
>
>
> "<ctacke/>" wrote:
>
>> I'd want to see the native code that it calls.
>>
>>
>> --
>> Chris Tacke - Embedded MVP
>> OpenNETCF Consulting
>> Managed Code in the Embedded World
>> www.opennetcf.com
>> --
>>
>>
>>
>>
>> "jeff" <jeff@discussions.microsoft.com> wrote in message
>> news:2B5EB157-0C5D-49C0-BC09-97D71923C72A@microsoft.com...
>> > Hi Guys,
>> >
>> > I have read a string from Unmanaged code, however, when I convert ptr
>> > to
>> > string.
>> > It also include "\r\n" in the string, how to avoid this issue:
>> >
>> > here is my source code:
>> > IntPtr m_pMessge = new IntPtr(0);
>> >
>> > // this call native code [dll file]
>> > ReplayForm(ref m_pMessge,this.E_User,this.E_Password);
>> > //convert pointer to object string
>> > string strMessage = Marshal.PtrToStringBSTR(m_pMessge);
>> > /*****
>> > after it has been converted, it holds \r\n ""
>> > */
>> > strMessage = strMessage.Replace(@"=\r\n", @"\r\n");
>> >
>> > Thanks
>> >
>> >

>>
>>
>>



  Reply With Quote
Old 07-03-2007, 03:18 PM   #5
=?Utf-8?B?amVmZg==?=
Guest
 
Posts: n/a
Default Re: Unmanage string convert into manage string

Hi Chris,

Thanks for your kind help.

However, Since I am pretty new to NET and C++;

Would you mind telling how to read native code CString into NET string?

because I read some message via CEMAPI to get Mail body.
and pass them to NET managment code.
when reading message from email, it holds some "returnkey"!
and other specifically character, so I think when I Allocate to heap.
It read one byte by byte. so the there are something is wrong.

Thanks



"<ctacke/>" wrote:

> All I can say is to check that your TrackMessage isn't putting in newlines
> or returns. The system surely doesn't instert them automatically.
>
> And where exactly is the SysFreeString mate to your SysAllocString?
> Furthermore why use a BSTR anyway? Are you also interoping with COM? If
> not, get rid of it.
>
>
> --
> Chris Tacke - Embedded MVP
> OpenNETCF Consulting
> Managed Code in the Embedded World
> www.opennetcf.com
> --
>
>
>
>
> "jeff" <jeff@discussions.microsoft.com> wrote in message
> news:E161A2AD-A7E7-4113-A0BE-7EF5A48B65A8@microsoft.com...
> >
> > here is some code:
> >
> > DLLEXPORT bool ReplayForm(BSTR* bt,LPTSTR szUser,LPTSTR szPassword)
> > {
> > CLogger::Record(L"ReplayForm");
> > if(!SyncService(szUser,szPassword))
> > return false;
> > int i = 0;
> > while(!TrackMessage(bt))
> > {
> > i++;
> > if(!SyncService(szUser,szPassword))
> > break;
> > Sleep(5000);
> > if(i > 120)
> > break;
> > };
> > return true;
> > }
> >
> > bool TrackMessage(BSTR* bt)
> > {
> > //here I have not put my actual code, since it is too complicated.
> > //in fact, save all the string to CString instance, and then
> > CString strMessage ="some long string which hold return";
> > *bt = ::SysAllocString(strMessage.GetBuffer(strMessage.GetLength()));
> > return true;
> > }
> >
> > Thanks.
> >
> >
> >
> > "<ctacke/>" wrote:
> >
> >> I'd want to see the native code that it calls.
> >>
> >>
> >> --
> >> Chris Tacke - Embedded MVP
> >> OpenNETCF Consulting
> >> Managed Code in the Embedded World
> >> www.opennetcf.com
> >> --
> >>
> >>
> >>
> >>
> >> "jeff" <jeff@discussions.microsoft.com> wrote in message
> >> news:2B5EB157-0C5D-49C0-BC09-97D71923C72A@microsoft.com...
> >> > Hi Guys,
> >> >
> >> > I have read a string from Unmanaged code, however, when I convert ptr
> >> > to
> >> > string.
> >> > It also include "\r\n" in the string, how to avoid this issue:
> >> >
> >> > here is my source code:
> >> > IntPtr m_pMessge = new IntPtr(0);
> >> >
> >> > // this call native code [dll file]
> >> > ReplayForm(ref m_pMessge,this.E_User,this.E_Password);
> >> > //convert pointer to object string
> >> > string strMessage = Marshal.PtrToStringBSTR(m_pMessge);
> >> > /*****
> >> > after it has been converted, it holds \r\n ""
> >> > */
> >> > strMessage = strMessage.Replace(@"=\r\n", @"\r\n");
> >> >
> >> > Thanks
> >> >
> >> >
> >>
> >>
> >>

>
>
>

  Reply With Quote
Reply



Thread Tools
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off