1// Licensed to the .NET Foundation under one or more agreements.
2// The .NET Foundation licenses this file to you under the MIT license.
3// See the LICENSE file in the project root for more information.
4
5#include <stdio.h>
6#include <xplatform.h>
7
8LPCWSTR strManaged = W("Managed\0String\0");
9LPCWSTR strNative = W(" Native\0String\0");
10
11size_t lenstrManaged = 7; // the length of strManaged
12size_t lenstrNative = 7; //the len of strNative
13
14extern "C" DLL_EXPORT bool STDMETHODCALLTYPE MarshalStringPointer_InOut(/*[in,out]*/LPWSTR *s)
15{
16 //Check the Input
17 size_t len = wcslen(*s);
18 if((len != lenstrManaged)||(wcsncmp(*s,strManaged, lenstrManaged)!=0))
19 {
20 printf("Error in Function MarshalStringPointer_InOut\n");
21
22 //Expected
23 printf("Expected:");
24 wprintf(L"%ls",strManaged);
25 printf("\tThe length of Expected:%d\n",static_cast<int>(lenstrManaged));
26
27 //Actual
28 printf("Actual:");
29 wprintf(L"%ls",*s);
30 printf("\tThe length of Actual:%d\n",static_cast<int>(len));
31
32 return false;
33 }
34
35 //Allocate New
36 CoreClrFree(*s);
37
38 //Alloc New
39 size_t length = lenstrNative + 1;
40 *s = (LPWSTR)CoreClrAlloc(length * sizeof(WCHAR));
41 memset(*s,'\0',length * sizeof(WCHAR));
42 wcsncpy_s(*s,length,strNative,lenstrNative);
43
44 //Return
45 return true;
46}
47