dotnet interop:
hello,
i try to pass a simple short array from COM to C# but I only get back
wrong values from the COM Server.
The COM Server:
*.h :
...
[id(4), helpstring("method Short_Array_read")] HRESULT
Short_Array_read ([in, out] short* pcElems, [in, out,
size_is(*pcElems)] short** Array_Out);
...
STDMETHOD(Short_Array_read)(short* pcElems, short** Array_Out);
*.cpp:
....
STDMETHODIMP CTypeTest::Short_Array_read(short* pcElems, short**
Array_Out)
{
*Array_Out = (short*)CoTaskMemAlloc(sizeof(short)* *pcElems);
//ZeroMemory(*Array_Out,*pcElems);
(*Array_Out)[0]=2;
(*Array_Out)[1]=2;
(*Array_Out)[2]=2;
(*Array_Out)[3]=2;
(*Array_Out)[4]=2;
return S_OK;
}
the C# Client:
...
short array_size = 5;
short[] ShortArray = new short[array_size];
ATL_COM_Projekt.CTypeTestClass TestClass = new
ATL_COM_Projekt.CTypeTestClass();
IntPtr buffer= Marshal.AllocCoTaskMem(Marshal.SizeOf(typeof(short))*array_size);
TestClass.Short_Array_read(ref array_size, buffer);
Marshal.Copy(buffer,ShortArray,0,5);
listBox.Items.Clear();
for(short i=0;i<5;i++)
{
listBox.Items.Add(ShortArray[i].ToString());
}
Marshal.FreeCoTaskMem(buffer);
...
what's wrong here?