summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuqun Lou <luqunl@users.noreply.github.com>2018-09-28 10:15:12 -0700
committerGitHub <noreply@github.com>2018-09-28 10:15:12 -0700
commitf90b65858d7ca0604e7aa1a1d04e9e5261e7f7af (patch)
treec9f6149b810f37467a44fb242c18a129ebce8f25
parenta67ce5980d6457f1af91b088fed7b95400aa7def (diff)
downloadcoreclr-f90b65858d7ca0604e7aa1a1d04e9e5261e7f7af.tar.gz
coreclr-f90b65858d7ca0604e7aa1a1d04e9e5261e7f7af.tar.bz2
coreclr-f90b65858d7ca0604e7aa1a1d04e9e5261e7f7af.zip
Enable BSTR Marshaling Support for x-plat PInvoke (#19766)
-rw-r--r--src/System.Private.CoreLib/src/Microsoft/Win32/Win32Native.cs5
-rw-r--r--src/System.Private.CoreLib/src/System/String.CoreCLR.cs2
-rw-r--r--src/System.Private.CoreLib/src/System/StubHelpers.cs5
-rw-r--r--src/classlibnative/bcltype/stringnative.cpp4
-rw-r--r--src/classlibnative/bcltype/stringnative.h2
-rw-r--r--src/dlls/mscoree/mscorwks_unixexports.src2
-rw-r--r--src/vm/ecalllist.h2
-rw-r--r--src/vm/ilmarshalers.cpp3
-rw-r--r--src/vm/ilmarshalers.h3
-rw-r--r--src/vm/mlinfo.cpp9
-rw-r--r--src/vm/mscorlib.h2
-rw-r--r--src/vm/mtypes.h2
12 files changed, 10 insertions, 31 deletions
diff --git a/src/System.Private.CoreLib/src/Microsoft/Win32/Win32Native.cs b/src/System.Private.CoreLib/src/Microsoft/Win32/Win32Native.cs
index 393d5633c7..0e18b6dc03 100644
--- a/src/System.Private.CoreLib/src/Microsoft/Win32/Win32Native.cs
+++ b/src/System.Private.CoreLib/src/Microsoft/Win32/Win32Native.cs
@@ -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);
diff --git a/src/System.Private.CoreLib/src/System/String.CoreCLR.cs b/src/System.Private.CoreLib/src/System/String.CoreCLR.cs
index 40a37c19c1..318aa7592a 100644
--- a/src/System.Private.CoreLib/src/System/String.CoreCLR.cs
+++ b/src/System.Private.CoreLib/src/System/String.CoreCLR.cs
@@ -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)
{
diff --git a/src/System.Private.CoreLib/src/System/StubHelpers.cs b/src/System.Private.CoreLib/src/System/StubHelpers.cs
index b8e34e0e6c..ef2a952b32 100644
--- a/src/System.Private.CoreLib/src/System/StubHelpers.cs
+++ b/src/System.Private.CoreLib/src/System/StubHelpers.cs
@@ -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)
diff --git a/src/classlibnative/bcltype/stringnative.cpp b/src/classlibnative/bcltype/stringnative.cpp
index 1a05ffb430..f93c813b26 100644
--- a/src/classlibnative/bcltype/stringnative.cpp
+++ b/src/classlibnative/bcltype/stringnative.cpp
@@ -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)
diff --git a/src/classlibnative/bcltype/stringnative.h b/src/classlibnative/bcltype/stringnative.h
index 1f3970b0a0..86397436a3 100644
--- a/src/classlibnative/bcltype/stringnative.h
+++ b/src/classlibnative/bcltype/stringnative.h
@@ -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
diff --git a/src/dlls/mscoree/mscorwks_unixexports.src b/src/dlls/mscoree/mscorwks_unixexports.src
index a3b00d0761..3743d58925 100644
--- a/src/dlls/mscoree/mscorwks_unixexports.src
+++ b/src/dlls/mscoree/mscorwks_unixexports.src
@@ -61,8 +61,10 @@ ReleaseSemaphore
ResetEvent
SetEnvironmentVariableW
SetEvent
+SysAllocStringByteLen
SysAllocStringLen
SysFreeString
+SysStringByteLen
SysStringLen
VirtualAlloc
VirtualFree
diff --git a/src/vm/ecalllist.h b/src/vm/ecalllist.h
index cd9638a869..ac5794e7f7 100644
--- a/src/vm/ecalllist.h
+++ b/src/vm/ecalllist.h
@@ -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)
diff --git a/src/vm/ilmarshalers.cpp b/src/vm/ilmarshalers.cpp
index 11b3e0b8d6..feb2030a3a 100644
--- a/src/vm/ilmarshalers.cpp
+++ b/src/vm/ilmarshalers.cpp
@@ -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;
diff --git a/src/vm/ilmarshalers.h b/src/vm/ilmarshalers.h
index 5ac5e41242..0767fb8c26 100644
--- a/src/vm/ilmarshalers.h
+++ b/src/vm/ilmarshalers.h
@@ -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:
diff --git a/src/vm/mlinfo.cpp b/src/vm/mlinfo.cpp
index ad7093f500..f7fc265c47 100644
--- a/src/vm/mlinfo.cpp
+++ b/src/vm/mlinfo.cpp
@@ -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;
diff --git a/src/vm/mscorlib.h b/src/vm/mscorlib.h
index 01156836cf..2813fc6e04 100644
--- a/src/vm/mscorlib.h
+++ b/src/vm/mscorlib.h
@@ -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)
diff --git a/src/vm/mtypes.h b/src/vm/mtypes.h
index 1a14760372..f31ba1f7e9 100644
--- a/src/vm/mtypes.h
+++ b/src/vm/mtypes.h
@@ -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)