S
Sagaert Johan
Hi
I am struggling with pinvoke
I have dll a function that is declared as :
sf_command (IntPtr sndfile,int command, IntPtr data, int datasize);
i need to pass a pointer to a double in the data parameter, i now did :
IntPtr mem = Marshal.AllocHGlobal(sizeof(double));
sf_command (sndfile,command, mem, sizeof(double));
then i did
byte[] ba=new byte[sizeof (Double)];
ba[0]=Marshal.ReadByte(mem,0);
ba[1]=Marshal.ReadByte(mem,1);
ba[2]=Marshal.ReadByte(mem,2);
ba[3]=Marshal.ReadByte(mem,3);
ba[4] = Marshal.ReadByte(mem, 4);
ba[5] = Marshal.ReadByte(mem, 5);
ba[6] = Marshal.ReadByte(mem, 6);
ba[7] = Marshal.ReadByte(mem, 7);
max_val = BitConverter.ToDouble(ba,0);
Marshal.FreeHGlobal(mem);
this works ,but i think there should be a shorter way ??
second question :
How do i pass an array doubles to my function ?
Johan
I am struggling with pinvoke
I have dll a function that is declared as :
sf_command (IntPtr sndfile,int command, IntPtr data, int datasize);
i need to pass a pointer to a double in the data parameter, i now did :
IntPtr mem = Marshal.AllocHGlobal(sizeof(double));
sf_command (sndfile,command, mem, sizeof(double));
then i did
byte[] ba=new byte[sizeof (Double)];
ba[0]=Marshal.ReadByte(mem,0);
ba[1]=Marshal.ReadByte(mem,1);
ba[2]=Marshal.ReadByte(mem,2);
ba[3]=Marshal.ReadByte(mem,3);
ba[4] = Marshal.ReadByte(mem, 4);
ba[5] = Marshal.ReadByte(mem, 5);
ba[6] = Marshal.ReadByte(mem, 6);
ba[7] = Marshal.ReadByte(mem, 7);
max_val = BitConverter.ToDouble(ba,0);
Marshal.FreeHGlobal(mem);
this works ,but i think there should be a shorter way ??
second question :
How do i pass an array doubles to my function ?
Johan