我已经搜索了大约12个小时,并且认为我甚至没有在这一点上正确的轨道上,或者如果我是正确的措辞我的搜索。我希望有人能给我指明正确的方向。
我试图访问非托管库中的一个函数,该函数的参数之一是一个固定大小的DWORD数组,我不知道如何在声明或调用中指定它。我也不确定函数的文档是否正确(或者我是否理解它)。
int EloGetScreenInfo(DWORD dwMonNum[32], int iScrCnt)参数:dwMonNum [in]:接收与触摸屏相关联的Windows编号的DWORD数组。iScrCnt [out]:它检索找到的Elo触摸屏的总数。 返回值:如果调用成功,则返回EloSuccess,否则返回错误代码。有关错误值的列表,请参见错误代码部分。 备注: 它返回与触摸屏相关联的Windows监视器编号列表,其中,索引是触摸屏编号,值是Windows监视器编号。 触摸屏是基于0的,Windows监视器是基于1的。 如果没有校准触摸屏,则窗口监视器返回为-1。 最多支持32个触摸屏。
注意,它在描述中声明,它返回一个监视器编号列表,这表示它将是已填充的值,但在参数描述中,它显示为[in],计数参数为[out],除非我误解了这些描述。在另一个示例链接中,它显示了一个使用示例,在该示例中两者似乎都已被填充。
DWORD dwEnumMon[MAX_SUPPORTED_SCR] ;
int iScrCnt, iRet ;
ZeroMemory( dwEnumMon, MAX_SUPPORTED_SCR ) ;
ZeroMemory( dwMonParam, MAX_SUPPORTED_SCR ) ;
// Get the list of all Elo Serial & USB screen and monitor association
iRet = EloGetScreenInfo(dwEnumMon,iScrCnt) ;
if(iRet != EloSuccess ){
printf( "Error Code = %d \n", iRet ) ;
return EloFailure;
}
else
if(iScrCnt<0){
printf( "No Elo touchscreens found\n" ) ;
return EloFailure;
}
// Process Commandline
ProcessCmdLine( argc, argv ) ;
// For all screens of matching monitor number enable / disable touch
for( int i=0; i<dwMonParamCnt; i++ ){
// where j is the screen number associated with the monitor number
for( int j=0; j<iScrCnt; j++ ){
if( dwMonParam[i] == dwEnumMon[j] ){
// Enables / Disables touch depending on the bFlag
// where j is the screen number
if( (iRet = EloSetTouchReportingState( bEnable , j )) == EloSuccess )
printf( "EloSetTouchReportingState Returned success\n" );
else
printf( "EloSetTouchReportingState Returned failed. Error \ Code=%d\n", iRet );
}
}
}
return EloSuccess;任何方向或帮助,你都可以提供。
发布于 2011-10-13 15:02:33
您应该能够使用普通的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);发布于 2011-10-13 14:58:17
这就是MSDN建议
using DWORD = System.UInt32;
int YourUnmanagedFunction([MarshalAs(UnmanagedType.LPArray, SizeConst=32)] DWORD[] array);https://stackoverflow.com/questions/7756027
复制相似问题