111,098
社区成员




int retrieve(int scanno,void* buf);
#define COUNT_DIMENSION_MAX 256
typedef struct tagVECTOR_st {
int dimension;
double vector[COUNT_DIMENSION_MAX];
} VECTOR_st;
struct tagSample_st {
int ID;
VECTOR_st Vec; //
} rec;
retrieveall(scanno,&rec);
public static extern int retrieveall(int scanno, IntPtr buf);
public partial class LibWrap
{
const int COUNT_DIMENSION_MAX = 256;
[StructLayout(LayoutKind.Sequential)]
public struct tagVECTOR_st
{
int dimension;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = COUNT_DIMENSION_MAX)]
double[] vector;
}
[StructLayout(LayoutKind.Sequential)]
public struct tagSample_st
{
int ID;
tagVECTOR_st Vec;
}
[DllImport("MyDll.dll")]
public static extern int retrieveall(int scanno, IntPtr buf);
}
LibWrap.tagSample_st rec = new LibWrap.tagSample_st();
int cb = Marshal.SizeOf(typeof(LibWrap.tagSample_st));
IntPtr ptr = Marshal.AllocCoTaskMem(cb);
//Marshal.StructureToPtr(rec, ptr, true);
int iResult = LibWrap.retrieveall(0, ptr);
Marshal.PtrToStructure(ptr, rec);
Marshal.FreeCoTaskMem(ptr);