我一直在寻找最近12个小时左右的时间,并且不认为我现在甚至在正确的轨道上,或者我是否正确地搜索了我的搜索。我希望有人能在这里指出我正确的方向。
我正在尝试访问非托管库中的一个函数,该函数将其参数作为其中一个固定大小的DWORD数组,我不知道如何在声明或调用中指定它。我也不确定该功能的文档是否正确(或者如果我理解的话)。
int EloGetScreenInfo(DWORD dwMonNum[32], int iScrCnt)
参数:
dwMonNum [in]
:用于接收与触摸屏关联的Windows监视器编号的DWORD数组。
iScrCnt [out]
:它检索找到的Elo触摸屏的总数。返回值:如果调用成功则返回EloSuccess,否则返回错误代码。有关错误值列表,请参阅错误代码部分。
说明:
它返回与触摸屏关联的Windows监视器编号列表,其中索引是触摸屏编号,值是Windows监视器编号。
触摸屏基于0,Windows监视器编号基于1。
如果未校准触摸屏,则Windows监视器将返回-1。
支持最多32个触摸屏。
请注意,在描述中它声明它返回一个监视器编号列表,表示它将是填充值,但在参数描述中它显示为[in]
并且count参数为{ {1}}除非我误解了描述。
在另请参见示例链接中,它显示了一个使用示例,其中两者似乎都已填充
[out]
任何方向的TIA或您可以提供的帮助
答案 0 :(得分:3)
你应该可以使用UInt32
的正常数组来调用它。您的托管原型将是:
[DLLImport "DllName"]
static extern int EloGetScreenInfo(UInt32[] dwMonNum, out int iScrCnt);
要调用它,只需指定编组:
UInt32[] MonitorNumbers = new UInt32[32];
int iScrCnt = 0;
int rslt = EloGetScreenInfo(
[MarshalAs(UnmanagedType.LPArray, SizeConst=32)] MonitorNumbers,
out iScrCnt);
答案 1 :(得分:1)
这就是MSDN suggests:
using DWORD = System.UInt32;
int YourUnmanagedFunction([MarshalAs(UnmanagedType.LPArray, SizeConst=32)] DWORD[] array);