diff options
author | Jiyoung Yun <jy910.yun@samsung.com> | 2016-11-23 19:09:09 +0900 |
---|---|---|
committer | Jiyoung Yun <jy910.yun@samsung.com> | 2016-11-23 19:09:09 +0900 |
commit | 4b4aad7217d3292650e77eec2cf4c198ea9c3b4b (patch) | |
tree | 98110734c91668dfdbb126fcc0e15ddbd93738ca /tests/src/Interop/SimpleStruct/SimpleStructNative.cpp | |
parent | fa45f57ed55137c75ac870356a1b8f76c84b229c (diff) | |
download | coreclr-4b4aad7217d3292650e77eec2cf4c198ea9c3b4b.tar.gz coreclr-4b4aad7217d3292650e77eec2cf4c198ea9c3b4b.tar.bz2 coreclr-4b4aad7217d3292650e77eec2cf4c198ea9c3b4b.zip |
Imported Upstream version 1.1.0upstream/1.1.0
Diffstat (limited to 'tests/src/Interop/SimpleStruct/SimpleStructNative.cpp')
-rw-r--r-- | tests/src/Interop/SimpleStruct/SimpleStructNative.cpp | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/tests/src/Interop/SimpleStruct/SimpleStructNative.cpp b/tests/src/Interop/SimpleStruct/SimpleStructNative.cpp new file mode 100644 index 0000000000..5fe82146b8 --- /dev/null +++ b/tests/src/Interop/SimpleStruct/SimpleStructNative.cpp @@ -0,0 +1,107 @@ +#include "platformdefines.h" + +#include <stdio.h> +#include <stdlib.h> +#include <xplatform.h> + +typedef void *voidPtr; + +typedef struct { int a; +bool b; +char* str;} Sstr; + +typedef struct { int a; +bool b; +double c;} Sstr_simple; + +typedef struct { + int a; + int extra; //padding needs to be added here as we have added 8 byte offset. + union + { + int i; + BOOL b; + double d; + }udata; +}ExplStruct; + +extern "C" +DLL_EXPORT BOOL _cdecl CdeclSimpleStructByRef(Sstr *p) +{ + p->a = 100; + p->b=1; + strncpy(p->str,"after",6); + return TRUE; +} + +extern "C" +DLL_EXPORT BOOL _cdecl CdeclSimpleExplStructByRef(ExplStruct *p) +{ + if((p->a != 0) || (p->udata.i != 10)) + { + printf("\np->a=%d, p->udata.i=%d\n",p->a,p->udata.i); + return FALSE; + } + p->a = 1; + p->udata.b = TRUE; + return TRUE; +} + +extern "C" +DLL_EXPORT Sstr_simple* _cdecl CdeclSimpleStruct(Sstr_simple p,BOOL *result) +{ + Sstr_simple *pSimpleStruct; + if((p.a !=100) || (p.b != FALSE) || (p.c != 3.142)) + { + *(result)= FALSE; + return NULL; + } + pSimpleStruct = (Sstr_simple*) TP_CoTaskMemAlloc(sizeof(Sstr_simple) * 1); + pSimpleStruct->a = 101; + pSimpleStruct->b = TRUE; + pSimpleStruct->c = 10.11; + *(result)= TRUE; + return pSimpleStruct; +} + +extern "C" +DLL_EXPORT ExplStruct* _cdecl CdeclSimpleExplStruct(ExplStruct p,BOOL *result) +{ + ExplStruct *pExplStruct; + if((p.a !=1) || (p.udata.b != FALSE)) + { + *(result)= FALSE; + return NULL; + } + pExplStruct = (ExplStruct*) TP_CoTaskMemAlloc(sizeof(ExplStruct) * 1); + pExplStruct->a = 2; + pExplStruct->udata.d = 3.142; + *(result)= TRUE; + return pExplStruct; +} + +extern "C" +DLL_EXPORT voidPtr _cdecl GetFptr(int i) +{ + switch(i) + { + + case 14: + return (voidPtr) &CdeclSimpleStructByRef; + break; + + case 16: + return (voidPtr) &CdeclSimpleStruct; + break; + + case 18: + return (voidPtr) &CdeclSimpleExplStructByRef; + break; + + case 20: + return (voidPtr) &CdeclSimpleExplStruct; + break; + + } + return (voidPtr) &CdeclSimpleStruct; +} |