问题描述
[DllImport("HCNetSDK.dll")]publicstaticexternboolNET_DVR_CaptureJPEGPicture(intlUserID,intlChannel,NET_DVR_JPEGPARAlpJpegPara,stringsPicFileName);
在C#中,sPicFileName 图片路径这个参数如何设置呢?下面是我拼接的一个字符串,但是总是报错stringSavePicturePath=PicturePath+DateTime.Now.ToString("yyyy-MM-dd") +".jpeg";boolSaveJPEGPicture=CHNetSdk.NET_DVR_CaptureJPEGPicture(lUserID,DVRChannel,sNetDvrJpegPara,SavePicturePath);
总是报这个错误对PInvoke函数“CHNetSdk::NET_DVR_CaptureJPEGPicture”的调用导致堆栈不对称。原因可能是托管的PInvoke签名与非托管的目标签名不匹配。请检查PInvoke签名的调用约定和参数与非托管的目标签名是否匹配。
解决方案
解决方案二:
没人在吗??
解决方案三:
先调试路径把路径写死写成C盘下的成功了以后再拼路径
解决方案四:
恩,先调试路径把路径写死写成C盘下的成功了以后再拼路径
解决方案五:
引用2楼keinshen的回复:
先调试路径把路径写死写成C盘下的成功了以后再拼路径
char*pchPicturePath=CNHCommonAPI::UnicodeToANSI(wchPicturePath);charchFileName[MAX_PATH];ZeroMemory(chFileName,sizeof(chFileName));sprintf_s(chFileName,"%s\%s.jpeg",pchPicturePath,strTestRunningNumber.c_str());BOOLbCaptureJPEGPicture=NET_DVR_CaptureJPEGPicture(lUserID,atoi(DVRChannel.c_str()),&sNetDvrJpegPara,chFileName);
接口中的路径参数在C++里面是这样设置的,但是在C#里面我就不知道怎么设置它的文件名字跟路径。当中wchPicturePath是获取配置文件中的路径
解决方案六:
引用3楼wumukang的回复:
恩,先调试路径把路径写死写成C盘下的成功了以后再拼路径
char*pchPicturePath=CNHCommonAPI::UnicodeToANSI(wchPicturePath);charchFileName[MAX_PATH];ZeroMemory(chFileName,sizeof(chFileName));sprintf_s(chFileName,"%s\%s.jpeg",pchPicturePath,strTestRunningNumber.c_str());BOOLbCaptureJPEGPicture=NET_DVR_CaptureJPEGPicture(lUserID,atoi(DVRChannel.c_str()),&sNetDvrJpegPara,chFileName);
接口中的路径参数在C++里面是这样设置的,但是在C#里面我就不知道怎么设置它的文件名字跟路径。当中wchPicturePath是获取配置文件中的路径
解决方案七:
怎么没人了?
解决方案八:
楼主,强烈建议你将海康的SDK重新用C++封装一下再用C#调用,否是连接多通道时会死的很惨,封装的C++库里面进行业务划分,主要将相机与IP通道进行对应,而且往C#传值的时候尽量用简单的数据类型,比如:char*之类的,千万别用结构体,将不用的变量也不要往上传了,这样C#调用起来就会方便很多。我们自己也是这么做的
解决方案九:
可能是前面结构的问题,后面的字符串即使不对也很少出调用错误.