EDIT: My post yesterday has been modified.
EDIT2: I've tried using Marshal.GetNativeVariantForObject
but I still get same error. See modified code below...
From VB.NET code, I am calling a method of a COM object and get DISP_E_TYPEMISMATCH
Dim thisDispName As String
Dim ap1StreamName As Object
Dim ap1Temperature As Object
Dim ap1Pressure As Object
Dim iTemporary(1) As Integer
Dim ptrToAp1Temperature As IntPtr = IntPtr.Zero
Const SizeOfNativeVariant As Int32 = 16
iTemporary(0) = 3
iTemporary(1) = iTemporary(0)
ap1Pressure = iTemporary
ptrToAp1Temperature = System.Runtime.InteropServices.Marshal.AllocHGlobal(SizeOfNativeVariant)
System.Runtime.InteropServices.Marshal.GetNativeVariantForObject(ap1Pressure, ptrToAp1Temperature)
apGen.GetHeaterStreams(thisDispName, ap1StreamName, ap1Temperature, ap1Pressure)
I know the method GetHeaterStreams
is defined below (I know, pretty old types...)
GetHeaterStreams(BSTR* dispName, VARIANT* streamName, VARIANT* temp, VARIANT* pressure);
I think (not really sure) that passing an empty Object
to parameter of type VARIANT*
is okay. However, I think the issue is passing ap1Pressure
, which is an Integer
array, to parameter of type VARIANT*