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