Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / Languages / Managed C++ / September 2005

Tip: Looking for answers? Try searching our database.

managed c++ pinned pointer cast

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Tim - 28 Sep 2005 16:55 GMT
I'm trying to co-erce a __gc array of Byte to a __nogc pointer to char to
pass to a native function call in a bit of managed c++ code like this:

  Byte field __gc[] = dynamic_cast<Byte __gc[]>(record->get_Item(i));
.
.
.
  Byte __pin * p = &field[0]; // << this is the proscribed way to pin a gc
array
  char __nogc * pinfield = p; // << C2440 error here!

I get the following compilation error:
: error C2440: 'initializing' : cannot convert from 'unsigned char __pin
*volatile ' to 'char *'

Given that p is effectively a no-gc pointer to unsigned char, I can't
understand why I can't assign it to pinfield - a no-gc pointer to char (i.e.
exactly the same, just treat the chars as signed instead of unsigned).
Can anyone explain why I can't do this and how I can achieve what I'm trying
to please?
cheers
Tim
Marcus Heege - 29 Sep 2005 07:29 GMT
I can't reproduce your problem. The following code compiles:

<code>
#using <mscorlib.dll>

using namespace System;

int main()
{
 Byte bytes __gc [] = __gc new Byte __gc [100];
 Byte __pin* ppBytes = &bytes[0];
 Byte* pBytes1 = ppBytes;
 Byte* pBytes2 = static_cast<Byte*>(ppBytes);
//Byte* pBytes3 = (Byte*)ppBytes;
}
</code>

If I uncomment the last line, I get a warning:

test.cpp(11) : warning C4303: C-style cast from 'unsigned char __gc *' to
'unsigned char __pin *volatile ' is deprecated, use static_cast, _try_cast
or dynamic_cast

Even if I modify the __pin* to __pin* volatile, it seems to be the same.

My tests are done with VC 2003 (CL.EXE V 13.10.3077) what version are you
using?

Marcus Heege

> I'm trying to co-erce a __gc array of Byte to a __nogc pointer to char to
> pass to a native function call in a bit of managed c++ code like this:
[quoted text clipped - 20 lines]
> cheers
> Tim
Tim - 29 Sep 2005 09:57 GMT
Your code doesn't include the line that fails - i.e.:

  char __nogc * pinfield = p; // << C2440 error here!

... being the bit where I try to cast the pinned Byte pointer to a no-gc
char pointer.

I'm using VC 1.0 (2002).

Tim

> I can't reproduce your problem. The following code compiles:
>
[quoted text clipped - 50 lines]
> > cheers
> > Tim
Norman Diamond - 29 Sep 2005 10:20 GMT
In reply to Tim, plain char is a different type from unsigned char.  Pointer
to plain char and pointer to unsigned char do not automatically convert to
each other.  You need a cast.  The management disclaims all responsibility
for this one.

Concerning Marcus Heege's report, if one line is commented out then the
warning seems to have its "from" and "to" backwards.  The cast is converting
an rvalue FROM a pointer to pinned type TO a pointer to managed type.  Is
this a bug in a Dutch language version of Visual Studio, a bug in Mr.
Heege's translation, or a bug in an English language version of Visual
Studio?

>I can't reproduce your problem. The following code compiles:
>
[quoted text clipped - 51 lines]
>> cheers
>> Tim
Tim - 29 Sep 2005 10:43 GMT
I've tried explicit casting and it still complains. It seems quite certain
that there is some reason why I can't do it.

Tim

> In reply to Tim, plain char is a different type from unsigned char.  Pointer
> to plain char and pointer to unsigned char do not automatically convert to
[quoted text clipped - 63 lines]
> >> cheers
> >> Tim
Tim - 29 Sep 2005 15:04 GMT
Hi Tim
Have you tried reinterpret_cast<>?
Tim

> I've tried explicit casting and it still complains. It seems quite certain
> that there is some reason why I can't do it.
[quoted text clipped - 68 lines]
> > >> cheers
> > >> Tim
Tim - 29 Sep 2005 16:11 GMT
Thanks Tim, you're a life saver. You should be an MVP.
Tim

> Hi Tim
> Have you tried reinterpret_cast<>?
[quoted text clipped - 72 lines]
> > > >> cheers
> > > >> Tim

Rate this thread:







Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.