Platform Invocation Services - Examples - A More Complex Example

A More Complex Example

// native declaration typedef struct _PAIR { DWORD Val1; DWORD Val2; } PAIR, *PPAIR; // compiled with /clr, use of #pragma managed/unmanaged can lead to double thunking; // avoid by using a stand-alone .cpp with .h includes // this would be located in a .h file. template<> inline CLR_PAIR^ marshal_as (const PAIR&Src) { // note use of de/referencing, must match your use CLR_PAIR^ Dest = gcnew CLR_PAIR; Dest->Val1 = Src.Val1; Dest->Val2 = Src.Val2; return Dest; }; CLR_PAIR^ mgd_pair1; CLR_PAIR^ mgd_pair2; PAIR native0,*native1=&native0; native0 = NativeCallGetRefToMemory; // using marshal_as, makes sense for large or frequently used types mgd_pair1 = marshal_as(*native1); // direct field use mgd_pair2->Val1 = native0.Val1; mgd_pair2->val2 = native0.val2; return(mgd_pair1); // return to C#

Read more about this topic:  Platform Invocation Services, Examples

Famous quotes containing the word complex:

    Instead of seeing society as a collection of clearly defined “interest groups,” society must be reconceptualized as a complex network of groups of interacting individuals whose membership and communication patterns are seldom confined to one such group alone.
    Diana Crane (b. 1933)