我正在制作一个包装器来读取TDM和TDMS文件,但我有一个问题
[DllImport(lib, CharSet = CharSet.Auto)]
static extern int DDC_OpenFileEx(
[MarshalAs(UnmanagedType.LPStr)]
string filePath,
[MarshalAs(UnmanagedType.LPStr)]
string fileType,
int read_only,
ref long file);
工作正常,但
[DllImport(lib, CharSet = CharSet.Auto, SetLastError = true)]
static extern int DDC_GetNumChannelGroups(long file,
[MarshalAs(UnmanagedType.U4)]
ref int numChannelGroups);
int numGru = 0;
errCode = ReadTDM.DDC_GetNumChannelGroups(file,ref numGru);
System.Console.WriteLine("Error Code {0} GetNumChannelGroups", errCode);
给出错误-6202,//将无效参数传递给库。 我试过ref uint,uint *(不安全),UIntPtr。来自.h文件的def
int __stdcall DDC_GetNumChannelGroups (DDCFileHandle file,unsigned int *numChannelGroups);
第二个参数是问题。 似乎unsigned int *!= uint。
有没有人知道如何从dll调用此函数?
http://forums.ni.com/ni/board/message?board.id=60&thread.id=11821
答案 0 :(得分:2)
这是宣布错误的第一个参数。抛出堆栈帧并阻止非托管代码正确读取第二个参数的指针。 “long”是64位,DDCFileHandle几乎肯定是32位操作系统上的32位指针。
将参数声明更改为IntPtr。您还需要更改返回该句柄的函数的声明。