问题描述
C++函数原型和参数说明QLIB_APIunsignedcharQLIB_GetAvailablePhonesPortList(unsignedshort*iNumPorts,unsignedshort*pPortList,unsignedshortiNumIgnorePorts,unsignedshort*pIgnorePortList)Parameters:iNumPorts=input/output,TheinputvalueisthemaximumnumberofentriesthatcanbeaddedtothepPortListarray.Theoutputvalueisupdatedtoreflecthowmanyvalidportswerefoundonthesystem.pPortList=output,unsignedchararray.EachunsignedcharindicatesaCOMportnumberthatisavailableonthesystem.iNumIgnorePorts=#ofportsinthe"ignoreportlist."ZerotocheckallportspIgnorePortList=alistofportnumbersthataretobeignored.Thiscanspeeduptheautodetectionofports.我在C#尝试个很多种类型,第二个参数都得不到正确的值,其他参数都正确。[DllImport(qmslDllName,SetLastError=true,CallingConvention=CallingConvention.Cdecl)]staticexternbyteQLIB_GetAvailablePhonesPortList(refushortiNumPorts,outbyte[]pPortList,ushortiNumIgnorePorts,byte[]pIgnorePortList);看C++的原型看出第一个和第二个参数的类型一样(unsignedshort*),但是参数说明表明,第一个参数是一个unsignedshort变量的地址,而第二个参数是一个unsignedshort数组的首地址,如果和第一个参数一个转换类型的话,只能得到数组的第一个值。比如我这样申明:[DllImport(qmslDllName,SetLastError=true,CallingConvention=CallingConvention.Cdecl)]staticexternbyteQLIB_GetAvailablePhonesPortList(refushortiNumPorts,refushortpPortList,ushortiNumIgnorePorts,byte[]pIgnorePortList);这样的话我第二个参数能获得一个正确的值,但是数组的其他值都得不到。请问前辈们,我应该怎么申明这个C#原型才可以获取到第二个参数的完整数组?
解决方案
解决方案二:
没有帮忙的吗?
解决方案三:
解决方案四:
有C的调用样列吗?不要去猜测。