Click here to Skip to main content
15,902,189 members
Home / Discussions / Managed C++/CLI
   

Managed C++/CLI

 
GeneralRe: Managed and Unmanaged structures Pin
Paul Selormey26-Feb-03 13:51
Paul Selormey26-Feb-03 13:51 
GeneralRe: Managed and Unmanaged structures Pin
-=jarl=-26-Feb-03 23:16
-=jarl=-26-Feb-03 23:16 
GeneralRe: Managed and Unmanaged structures Pin
Paul Selormey27-Feb-03 0:20
Paul Selormey27-Feb-03 0:20 
GeneralRe: Managed and Unmanaged structures Pin
-=jarl=-27-Feb-03 0:22
-=jarl=-27-Feb-03 0:22 
GeneralManaged/Unmanaged: pinning ptr madness Pin
VizOne25-Feb-03 22:04
VizOne25-Feb-03 22:04 
GeneralRe: Managed/Unmanaged: pinning ptr madness Pin
Jeff J26-Feb-03 16:24
Jeff J26-Feb-03 16:24 
GeneralRe: Managed/Unmanaged: pinning ptr madness Pin
VizOne27-Feb-03 1:56
VizOne27-Feb-03 1:56 
GeneralRe: Managed/Unmanaged: pinning ptr madness Pin
VizOne28-Feb-03 0:31
VizOne28-Feb-03 0:31 
Me again!

Funnily, during a test I found out, that pinning the pointer first and then passing it to the native function works slightly faster...

Of course reinterpret_cast is an evil monster, but I have to use it here, haven't I?

Let's say, I have those structs:

<code>
[StructLayout(LayoutKind::Sequential, Pack=4)]
public __value struct ManagedStruct
{
float AddComponents();
float a, b, c;
};

#pragma pack(push, 4)
struct NativeStruct
{
float a, b, c;
}
#pragma pack(pop)
</code>

I guess these structs are guaranteed to be binarilly identical.

Now I have a function:
<code>
// the native version
#pragma unmanaged
float AddComponents(NativeStruct * p) { return p->a + p->b + p->c; }
#pragma

</code>

If I want to call this from within managed code via IJW, I'd do this:

<code>

float ManagedStruct::AddComponents()
{
ManagedStruct __pin * pinThis = this;
return ::AddComponents(reinterpret_cast<NativeStruct *>(pThis));

</code>

The reinterpret_cast is safe and ok, or not?

Is there another way of calling the native function?
- Andre
GeneralRe: Managed/Unmanaged: pinning ptr madness Pin
Jeff J28-Feb-03 22:25
Jeff J28-Feb-03 22:25 
GeneralImplementing IDisposable Pin
VizOne24-Feb-03 9:49
VizOne24-Feb-03 9:49 
GeneralRe: Implementing IDisposable Pin
Paul Selormey25-Feb-03 0:23
Paul Selormey25-Feb-03 0:23 
GeneralRe: Implementing IDisposable Pin
VizOne25-Feb-03 0:30
VizOne25-Feb-03 0:30 
GeneralRe: Implementing IDisposable Pin
Paul Selormey25-Feb-03 0:49
Paul Selormey25-Feb-03 0:49 
GeneralRe: Implementing IDisposable Pin
VizOne25-Feb-03 0:58
VizOne25-Feb-03 0:58 
GeneralRe: Implementing IDisposable Pin
Paul Selormey25-Feb-03 1:48
Paul Selormey25-Feb-03 1:48 
GeneralRe: Implementing IDisposable Pin
VizOne25-Feb-03 2:45
VizOne25-Feb-03 2:45 
GeneralRe: Implementing IDisposable Pin
Paul Selormey25-Feb-03 2:54
Paul Selormey25-Feb-03 2:54 
QuestionManaged type??? Pin
Orkun GEDiK21-Feb-03 12:49
Orkun GEDiK21-Feb-03 12:49 
AnswerRe: Managed type??? Pin
Paul Selormey23-Feb-03 1:46
Paul Selormey23-Feb-03 1:46 
GeneralRe: Managed type??? Pin
Orkun GEDiK23-Feb-03 3:55
Orkun GEDiK23-Feb-03 3:55 
GeneralRe: Managed type??? Pin
Paul Selormey23-Feb-03 23:49
Paul Selormey23-Feb-03 23:49 
GeneralRe: Managed type??? Pin
Orkun GEDiK24-Feb-03 10:48
Orkun GEDiK24-Feb-03 10:48 
GeneralRe: Managed type??? Pin
Paul Selormey25-Feb-03 0:30
Paul Selormey25-Feb-03 0:30 
GeneralRe: Managed type??? Pin
Orkun GEDiK25-Feb-03 10:59
Orkun GEDiK25-Feb-03 10:59 
GeneralAppDomain question... Pin
Orkun GEDiK21-Feb-03 11:28
Orkun GEDiK21-Feb-03 11:28 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.