麻烦帮我看看我调C++ dll的时候C#和C++之间的类型转换哪还有问题

问题描述

C++sdk文档中写的方法:函数原型:int__stdcallCapturePicture(HANLDEhandle,InfoEx*pResult,char*szFileName,char*szPlateFileName,Time*pTime);参数:HANLDEhandle:设备句柄InfoEx*pResult:识别结果char*szFileName:保存的图片文件名称(需要传入缓冲区)char*szPlateFileName:保存的车牌图片文件名称(需要传入缓冲区)Time*pTime:抓拍时间

给我的头文件源码中InfoEx和Time是这样定义的:typedefstructtag_InfoEx_e{intnLoopID;intnLoopPos;DIRECTdirect;DevicePlateInfostPlates;}InfoEx,*InfoEx;typedefDWORDDIRECT;#defineDIRECT_DOWN(0)//向下#defineDIRECT_UP(1)//向上#defineDIRECT_LEFT(2)//向左#defineDIRECT_RIGHT(3)//向右#defineUNKOWN(4)//未知#definePLATE_NUM_LEN(16)#defineCOLOR_LEN(8)typedefstruct_tagInfo{charaNum[PLATE_NUM_LEN];charaColor[COLOR_LEN];charaCColor[COLOR_LEN];floatfRealty;Rectroi;intnType;floatfLetterRealty[PLATE_NUM_LEN];}Info,*Info;typedefstruct_tagRect{intleft;inttop;intright;intbottom;}Rect,*Rect;typedefstruct_tagTime{WORDYear;WORDMonth;WORDDay;WORDHour;WORDMinute;WORDSecond;WORDMillisecond;}Time,*Time;

我C#的调用:publicstructLPRPlateInfoEx{publicintnLoopId{get;set;}publicintnLoopPos{get;set;}publicUInt32direct{get;set;}publicInfostPlates{get;set;}}publicstructPlateInfo{publicstringaPlateNum{get;set;}publicstringaColor{get;set;}publicstringaCColor{get;set;}publicfloatfRealty{get;set;}publicRectroi{get;set;}publicintnType{get;set;}publicfloatfLetterRealty{get;set;}}publicstructRect{publicintleft{get;set;}publicinttop{get;set;}publicintright{get;set;}publicintbottom{get;set;}}publicstructTime{publicUInt16Year{get;set;}publicUInt16Month{get;set;}publicUInt16Day{get;set;}publicUInt16Hour{get;set;}publicUInt16Minute{get;set;}publicUInt16Second{get;set;}publicUInt16Millisecond{get;set;}}[DllImport("xxx.dll",EntryPoint="CapturePicture",CharSet=CharSet.Auto,CallingConvention=CallingConvention.Cdecl)]publicstaticexternintCapturePicture(IntPtrhandle,refInfoExpResult,StringBuilderszFileName,StringBuilderszPlateFileName,refTimepTime);

调CapturePicture的时候报错Additionalinformation:对PInvoke函数“...”的调用导致堆栈不对称。原因可能是托管的PInvoke签名与非托管的目标签名不匹配。请检查PInvoke签名的调用约定和参数与非托管的目标签名是否匹配。网上查应该是C#和c++类型不匹配的问题。谁能帮我看看还有哪里不匹配

解决方案

解决方案二:
我这样写应该更清楚点typedefstructtag_InfoEx_e{intnLoopID;intnLoopPos;DIRECTdirect;DevicePlateInfostPlates;}InfoEx,*InfoEx;

publicstructPlateInfoEx{publicintnLoopId{get;set;}publicintnLoopPos{get;set;}publicUInt32direct{get;set;}publicInfostPlates{get;set;}}

---------------------------------------typedefDWORDDIRECT;#defineDIRECT_DOWN(0)//向下#defineDIRECT_UP(1)//向上#defineDIRECT_LEFT(2)//向左#defineDIRECT_RIGHT(3)//向右#defineUNKOWN(4)//未知#definePLATE_NUM_LEN(16)#defineCOLOR_LEN(8)typedefstruct_tagInfo{charaNum[PLATE_NUM_LEN];charaColor[COLOR_LEN];charaCColor[COLOR_LEN];floatfRealty;Rectroi;intnType;floatfLetterRealty[PLATE_NUM_LEN];}Info,*Info;

publicstructPlateInfo{publicstringaPlateNum{get;set;}publicstringaColor{get;set;}publicstringaCColor{get;set;}publicfloatfRealty{get;set;}publicRectroi{get;set;}publicintnType{get;set;}publicfloatfLetterRealty{get;set;}}

-----------------------------------typedefstruct_tagRect{intleft;inttop;intright;intbottom;}Rect,*Rect;

publicstructRect{publicintleft{get;set;}publicinttop{get;set;}publicintright{get;set;}publicintbottom{get;set;}}

-----------------------typedefstruct_tagTime{WORDYear;WORDMonth;WORDDay;WORDHour;WORDMinute;WORDSecond;WORDMillisecond;}Time,*Time;

publicstructTime{publicUInt16Year{get;set;}publicUInt16Month{get;set;}publicUInt16Day{get;set;}publicUInt16Hour{get;set;}publicUInt16Minute{get;set;}publicUInt16Second{get;set;}publicUInt16Millisecond{get;set;}}

解决方案三:
http://stackoverflow.com/questions/30399339/marshalling-float-array-to-c-sharp参照这个搞定了。。。。来人回复送分~

时间: 2024-09-25 00:26:46

麻烦帮我看看我调C++ dll的时候C#和C++之间的类型转换哪还有问题的相关文章

拦截器问题 谢谢-不进Struts拦截器,麻烦帮解决,谢谢~~~~~

问题描述 不进Struts拦截器,麻烦帮解决,谢谢~~~~~ test.jsp <%@ page contentType="text/html;charset=GB2312"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

oracle trc 文件-各位数据大神麻烦帮我分析下这个oracle的trc文件,最大游标数设置的为1000

问题描述 各位数据大神麻烦帮我分析下这个oracle的trc文件,最大游标数设置的为1000 *** 2014-01-10 09:52:31.526*********START PLSQL RUNTIME DUMP************Got internal error Exception caught in pl l run-time while running PLSQLGot ORA-1000 while running PLSQLPACKAGE BODY FPM.GET_PARAME

注解-麻烦帮我看下SSH整合遇到的问题

问题描述 麻烦帮我看下SSH整合遇到的问题 最近公司要用SSH注解开发 我做了个小demo但是导入Easy UI的时候出现这个错误 解决方案 看样子是你代码里的EasyUI的引入路径写错了.可以把代码贴出来看下. 解决方案二: <link rel="stylesheet" type="text/css" href="/EasyUI/themes/default/easyui.css"> <link rel="style

下载-flash相册问题,有谁知道,麻烦帮帮忙,谢谢。。

问题描述 flash相册问题,有谁知道,麻烦帮帮忙,谢谢.. flash项目链接 刚刚下载了一个flash相册.打开3d_art_gallery.fla 运行就出现了 "script2.as,643 行 1046: 找不到类型,或者它不是编译时常数: Cube." 去百度了一下,我就下载 papervision3D的包.现在不明白的是怎么去import ,cube.as 文件放在哪里才是对的.papervision3D 的package哪里都放置过了.根目录,文件源目录,跟scrip2

麻烦帮我注释一下代码,谢谢了

问题描述 麻烦帮我注释一下代码,谢谢了 //添加文件到文件库 public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { if (doWhat == FILE_LIB_ADD) { ArrayList child = childList.get(groupPosition); if (!fm.isMultFile()) { if (child.contains(path)

谁可以帮我把这个文件(DreamerShop.dll)给反编辑过来一下。

问题描述 谁可以帮我把这个文件(DreamerShop.dll)给反编辑过来一下.反编辑过来之后不要是汇编语言噢谢谢!!!! 解决方案 解决方案二:namespaceDreamerShop{publicclassAdminFrameBottom:Page{//FieldsprotectedLabellbLoginInf;protectedLabellbVerInf;privateclsMainmclsMain;protectedLanguagesDealmyLanguagesDeal;//Met

web工程发布到新浪sae上出现503错误,麻烦帮我看一下JVM 日志

问题描述 web工程发布到新浪sae上出现503错误,麻烦帮我看一下JVM 日志 [29/Nov/2014:17:08:30 +0800] JAVA_Error: Failed startup of context c.s.s.w.SaeWebAppContext{/wuareyoung-1file:/data1/jetty_work/671/wuareyoung/jetty-0.0.0.0-12907-wuareyoung.war-_wuareyoung-1-any-/webapp/}/dat

链表-C语言关于学生管理系统的题,麻烦帮我看看哪里出错了,谢谢!

问题描述 C语言关于学生管理系统的题,麻烦帮我看看哪里出错了,谢谢! 代码如下: #include<stdio.h> #include<stdlib.h> #include<string.h> #define OK 1 #define ERROR 0 struct Score { int score; }s[3];//课程及对应成绩 typedef struct LNode { char name[3]; struct Score s[3]; struct LNode

jQuery mobile ajax加载数据后没有样式,麻烦帮帮忙谢谢!

问题描述 jQuery mobile ajax加载数据后没有样式,麻烦帮帮忙谢谢! // $.ajax({ type: 'post' url: ajaxUrl //<%=request.getParameter("""")%> data: {id:p_idcur_page:curpage} dataType: 'json' success: function (data) { //判断返回的集合是否为空 if(data.examInfoList!=nul