all groups > dotnet interop > october 2004 >
You're in the

dotnet interop

group:

Short Array from COM to C#


Short Array from COM to C# jo_mil2003 NO[at]SPAM yahoo.de
10/29/2004 4:15:57 AM
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?

Re: Short Array from COM to C# jo_mil2003 NO[at]SPAM yahoo.de
11/1/2004 10:30:22 AM
The soultion is, that there's a bug in tlbimp.exe, so you had to
manipulate the il code for nice arrays:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconeditinginteropassembly.asp

the example with Multidimensional C-Style Arrays didn't work, I get a
compiler errror, if somebody has got a solution for a
dynamic-mulitdimensional-array com-interop please post it. Thank you..



[quoted text, click to view]
AddThis Social Bookmark Button