Enable BSTR Marshaling Support for x-plat PInvoke (dotnet/coreclr#19766)
authorLuqun Lou <luqunl@users.noreply.github.com>
Fri, 28 Sep 2018 17:15:12 +0000 (10:15 -0700)
committerGitHub <noreply@github.com>
Fri, 28 Sep 2018 17:15:12 +0000 (10:15 -0700)
Commit migrated from https://github.com/dotnet/coreclr/commit/f90b65858d7ca0604e7aa1a1d04e9e5261e7f7af

12 files changed:
src/coreclr/src/System.Private.CoreLib/src/Microsoft/Win32/Win32Native.cs
src/coreclr/src/System.Private.CoreLib/src/System/String.CoreCLR.cs
src/coreclr/src/System.Private.CoreLib/src/System/StubHelpers.cs
src/coreclr/src/classlibnative/bcltype/stringnative.cpp
src/coreclr/src/classlibnative/bcltype/stringnative.h
src/coreclr/src/dlls/mscoree/mscorwks_unixexports.src
src/coreclr/src/vm/ecalllist.h
src/coreclr/src/vm/ilmarshalers.cpp
src/coreclr/src/vm/ilmarshalers.h
src/coreclr/src/vm/mlinfo.cpp
src/coreclr/src/vm/mscorlib.h
src/coreclr/src/vm/mtypes.h

index 393d563..0e18b6d 100644 (file)
@@ -203,14 +203,11 @@ namespace Microsoft.Win32
         [DllImport(Interop.Libraries.OleAut32)]
         internal static extern void SysFreeString(IntPtr bstr);
 
-#if FEATURE_COMINTEROP
         [DllImport(Interop.Libraries.OleAut32)]
         internal static extern IntPtr SysAllocStringByteLen(byte[] str, uint len);  // BSTR
 
         [DllImport(Interop.Libraries.OleAut32)]
-        internal static extern uint SysStringByteLen(IntPtr bstr);
-
-#endif
+        internal static extern uint SysStringByteLen(IntPtr bstr); // BSTR
 
         [DllImport(Interop.Libraries.Kernel32, SetLastError = true)]
         internal static extern unsafe int WriteFile(SafeFileHandle handle, byte* bytes, int numBytesToWrite, out int numBytesWritten, IntPtr mustBeZero);
index 40a37c1..318aa75 100644 (file)
@@ -64,14 +64,12 @@ namespace System
         [MethodImplAttribute(MethodImplOptions.InternalCall)]
         internal extern bool IsAscii();
 
-#if FEATURE_COMINTEROP
         // Set extra byte for odd-sized strings that came from interop as BSTR.
         [MethodImplAttribute(MethodImplOptions.InternalCall)]
         internal extern void SetTrailByte(byte data);
         // Try to retrieve the extra byte - returns false if not present.
         [MethodImplAttribute(MethodImplOptions.InternalCall)]
         internal extern bool TryGetTrailByte(out byte data);
-#endif
 
         public static string Intern(string str)
         {
index b8e34e0..ef2a952 100644 (file)
@@ -208,8 +208,6 @@ namespace System.StubHelpers
         }
     }
 
-#if FEATURE_COMINTEROP
-
     internal static class BSTRMarshaler
     {
         internal static unsafe IntPtr ConvertToNative(string strManaged, IntPtr pNativeBuffer)
@@ -334,9 +332,6 @@ namespace System.StubHelpers
         }
     }  // class BSTRMarshaler
 
-#endif // FEATURE_COMINTEROP
-
-
     internal static class VBByValStrMarshaler
     {
         internal static unsafe IntPtr ConvertToNative(string strManaged, bool fBestFit, bool fThrowOnUnmappableChar, ref int cch)
index 1a05ffb..f93c813 100644 (file)
@@ -149,8 +149,6 @@ FCIMPL1(INT32, COMString::Length, StringObject* str) {
 FCIMPLEND
 
 
-#ifdef FEATURE_COMINTEROP
-
 FCIMPL2(FC_BOOL_RET, COMString::FCTryGetTrailByte, StringObject* thisRefUNSAFE, UINT8 *pbData)
 {
     FCALL_CONTRACT;
@@ -173,8 +171,6 @@ FCIMPL2(VOID, COMString::FCSetTrailByte, StringObject* thisRefUNSAFE, UINT8 bDat
 }
 FCIMPLEND
 
-#endif // FEATURE_COMINTEROP
-
 // Revert to command line compilation flags
 #if defined(_MSC_VER) && defined(_TARGET_X86_)
 #pragma optimize ("", on)
index 1f3970b..8639743 100644 (file)
@@ -57,10 +57,8 @@ public:
     //
     // Interop
     //
-#ifdef FEATURE_COMINTEROP
     static FCDECL2(FC_BOOL_RET, FCTryGetTrailByte, StringObject* thisRefUNSAFE, UINT8 *pbData);
     static FCDECL2(VOID,        FCSetTrailByte,    StringObject* thisRefUNSAFE, UINT8 bData);
-#endif // FEATURE_COMINTEROP
 };
 
 // Revert to command line compilation flags
index a3b00d0..3743d58 100644 (file)
@@ -61,8 +61,10 @@ ReleaseSemaphore
 ResetEvent
 SetEnvironmentVariableW
 SetEvent
+SysAllocStringByteLen
 SysAllocStringLen
 SysFreeString
+SysStringByteLen
 SysStringLen
 VirtualAlloc
 VirtualFree
index cd9638a..ac5794e 100644 (file)
@@ -110,10 +110,8 @@ FCFuncStart(gStringFuncs)
     FCIntrinsic("get_Length", COMString::Length, CORINFO_INTRINSIC_StringLength)
     FCIntrinsic("get_Chars", COMString::GetCharAt, CORINFO_INTRINSIC_StringGetChar)
     FCFuncElement("IsAscii", COMString::IsAscii)
-#ifdef FEATURE_COMINTEROP
     FCFuncElement("SetTrailByte", COMString::FCSetTrailByte)
     FCFuncElement("TryGetTrailByte", COMString::FCTryGetTrailByte)
-#endif // FEATURE_COMINTEROP
 FCFuncEnd()
 
 FCFuncStart(gValueTypeFuncs)
index 11b3e0b..feb2030 100644 (file)
@@ -1801,6 +1801,7 @@ void ILVBByValStrMarshaler::EmitClearNative(ILCodeStream* pslILEmit)
     // static void ClearNative(IntPtr pNative);
     pslILEmit->EmitCALL(METHOD__VBBYVALSTRMARSHALER__CLEAR_NATIVE, 1, 0);
 }
+#endif // FEATURE_COMINTEROP
 
 LocalDesc ILBSTRMarshaler::GetManagedType()
 {
@@ -1887,7 +1888,7 @@ void ILBSTRMarshaler::EmitConvertContentsNativeToCLR(ILCodeStream* pslILEmit)
     EmitStoreManagedValue(pslILEmit);
 }
 
-
+#ifdef FEATURE_COMINTEROP
 LocalDesc ILAnsiBSTRMarshaler::GetNativeType()
 {
     LIMITED_METHOD_CONTRACT;
index 5ac5e41..0767fb8 100644 (file)
@@ -2619,7 +2619,6 @@ protected:
     virtual void EmitConvertContentsNativeToCLR(ILCodeStream* pslILEmit);
 };
 
-#ifdef FEATURE_COMINTEROP
 class ILBSTRMarshaler : public ILOptimizedAllocMarshaler
 {
 public:
@@ -2648,7 +2647,7 @@ protected:
     virtual void EmitConvertContentsNativeToCLR(ILCodeStream* pslILEmit);
 };
 
-
+#ifdef FEATURE_COMINTEROP
 class ILAnsiBSTRMarshaler : public ILMarshaler
 {
 public:
index ad7093f..f7fc265 100644 (file)
@@ -2125,7 +2125,6 @@ MarshalInfo::MarshalInfo(Module* pModule,
                             break;
                         }
 
-#ifdef FEATURE_COMINTEROP
                         case NATIVE_TYPE_BSTR:
                             if (builder)
                             {
@@ -2134,7 +2133,7 @@ MarshalInfo::MarshalInfo(Module* pModule,
                             }
                             m_type = MARSHAL_TYPE_BSTR;
                             break;
-     
+#ifdef FEATURE_COMINTEROP     
                         case NATIVE_TYPE_ANSIBSTR:
                             if (builder)
                             {
@@ -3911,8 +3910,8 @@ VOID MarshalInfo::DumpMarshalInfo(Module* pModule, SigPointer sig, const SigType
 
                     XXXXX(NATIVE_TYPE_IUNKNOWN)
 
-#ifdef FEATURE_COMINTEROP
                     XXXXX(NATIVE_TYPE_BSTR)
+#ifdef FEATURE_COMINTEROP
                     XXXXX(NATIVE_TYPE_TBSTR)
                     XXXXX(NATIVE_TYPE_ANSIBSTR)
                     XXXXX(NATIVE_TYPE_HSTRING)
@@ -4359,11 +4358,9 @@ VOID MarshalInfo::MarshalTypeToString(SString& strMarshalType, BOOL fSizeIsSpeci
             case MARSHAL_TYPE_DATE:
                 strRetVal = W("DATE");
                 break;
-#ifdef FEATURE_COMINTEROP
              case MARSHAL_TYPE_BSTR:
                 strRetVal = W("BSTR");
                 break;
-#endif // FEATURE_COMINTEROP
             case MARSHAL_TYPE_LPWSTR:
                 strRetVal = W("LPWSTR");
                 break;
@@ -5014,11 +5011,9 @@ void ArrayMarshalInfo::InitElementInfo(CorNativeType arrayNativeType, MarshalInf
                         m_vtElement = static_cast<VARTYPE>(isAnsi ? VT_LPSTR : VT_LPWSTR);
                     }
                     break;
-#ifdef FEATURE_COMINTEROP
                 case NATIVE_TYPE_BSTR:
                     m_vtElement = VT_BSTR;
                     break;
-#endif // FEATURE_COMINTEROP
                 case NATIVE_TYPE_LPSTR:
                     m_vtElement = VT_LPSTR;
                     break;
index 0115683..2813fc6 100644 (file)
@@ -1091,12 +1091,12 @@ DEFINE_METHOD(WSTRBUFFERMARSHALER,  CONVERT_TO_NATIVE,      ConvertToNative,
 DEFINE_METHOD(WSTRBUFFERMARSHALER,  CONVERT_TO_MANAGED,     ConvertToManaged,           SM_IntPtr_RetStr)
 DEFINE_METHOD(WSTRBUFFERMARSHALER,  CLEAR_NATIVE,           ClearNative,                SM_IntPtr_RetVoid)
 
-#ifdef FEATURE_COMINTEROP
 DEFINE_CLASS(BSTRMARSHALER,         StubHelpers,            BSTRMarshaler)
 DEFINE_METHOD(BSTRMARSHALER,        CONVERT_TO_NATIVE,      ConvertToNative,            SM_Str_IntPtr_RetIntPtr)
 DEFINE_METHOD(BSTRMARSHALER,        CONVERT_TO_MANAGED,     ConvertToManaged,           SM_IntPtr_RetStr)
 DEFINE_METHOD(BSTRMARSHALER,        CLEAR_NATIVE,           ClearNative,                SM_IntPtr_RetVoid)
 
+#ifdef FEATURE_COMINTEROP
 DEFINE_CLASS(ANSIBSTRMARSHALER,     StubHelpers,            AnsiBSTRMarshaler)
 DEFINE_METHOD(ANSIBSTRMARSHALER,    CONVERT_TO_NATIVE,      ConvertToNative,            SM_Int_Str_RetIntPtr)
 DEFINE_METHOD(ANSIBSTRMARSHALER,    CONVERT_TO_MANAGED,     ConvertToManaged,           SM_IntPtr_RetStr)
index 1a14760..f31ba1f 100644 (file)
@@ -42,8 +42,8 @@ DEFINE_MARSHALER_TYPE(MARSHAL_TYPE_DATE,            DateMarshaler,
 DEFINE_MARSHALER_TYPE(MARSHAL_TYPE_LPWSTR,          WSTRMarshaler,                       false)
 DEFINE_MARSHALER_TYPE(MARSHAL_TYPE_LPSTR,           CSTRMarshaler,                       false)
 DEFINE_MARSHALER_TYPE(MARSHAL_TYPE_LPUTF8STR,       CUTF8Marshaler,                      false)
-#ifdef FEATURE_COMINTEROP
 DEFINE_MARSHALER_TYPE(MARSHAL_TYPE_BSTR,            BSTRMarshaler,                       false)
+#ifdef FEATURE_COMINTEROP
 DEFINE_MARSHALER_TYPE(MARSHAL_TYPE_ANSIBSTR,        AnsiBSTRMarshaler,                   false)
 DEFINE_MARSHALER_TYPE(MARSHAL_TYPE_HSTRING,         HSTRINGMarshaler,                    true)
 DEFINE_MARSHALER_TYPE(MARSHAL_TYPE_DATETIME,        DateTimeMarshaler,                   true)