Answered by:
convert void* to UIntPtr(windows runtime type)

Question
-
Hi,
I am developing a WinRT c++ component.
I have a buffer of type void* and i want get this buffer to a C# metro app.
so i want to change the this void* buffer to windows runtime type UIntPtr.
how to do this...any sample code really helps.
thanks,
Bhash
Monday, April 23, 2012 6:29 PM
Answers
-
*reinterpret_cast<Platform::UIntPtr*>(&myVoidPtr);
The documentation says UIntPtr is a ValueType, so I have to assume that this will work. I can't make any promises though. Even if it works now, the documentation doesn't says anything about it, so it may not in the future.It's a good think they aren't checking wait chains to prevent blocking the UI thread for an asynchronous task.
- Proposed as answer by brentAtBrainium Monday, April 23, 2012 9:38 PM
- Marked as answer by Jesse Jiang Monday, May 7, 2012 2:34 AM
Monday, April 23, 2012 9:38 PM
All replies
-
*reinterpret_cast<Platform::UIntPtr*>(&myVoidPtr);
The documentation says UIntPtr is a ValueType, so I have to assume that this will work. I can't make any promises though. Even if it works now, the documentation doesn't says anything about it, so it may not in the future.It's a good think they aren't checking wait chains to prevent blocking the UI thread for an asynchronous task.
- Proposed as answer by brentAtBrainium Monday, April 23, 2012 9:38 PM
- Marked as answer by Jesse Jiang Monday, May 7, 2012 2:34 AM
Monday, April 23, 2012 9:38 PM -
I have tried this code snippet and it does not work.. I am also looking for a way to include a void* pointer within the WinRT component so that I can use it from my C# Metro App. For the first line "*reinterpret_cast<Platform::UIntPtr*>(&myVoidPtr);" , it says "Error: Expected an identifier"
For Line 2 " void* d;" I'm getting Error: signature of member contains native type 'void *'
What error am i making?
Thanks!
public value struct t { *reinterpret_cast<Platform::UIntPtr*>(&myVoidPtr); // Does this work? void* d; // Does this work? uint32 f; };
Monday, April 23, 2012 11:39 PM -
That's just a cast. You can't have a cast by itself, you have to assign it to something:
Platform::UIntPtr result = *reinterpret_cast<Platform::UIntPtr*>(&myVoidPtr);
or, of course, return it from a method:
return *reinterpret_cast<Platform::UIntPtr*>(&myVoidPtr);
Standard C++ stuff, really.
Software Engineer, Brainium Studios LLC
Tuesday, May 1, 2012 5:43 PM