C#调用C++dll传入参数后位数丢失

问题描述

publicstructRequest{[MarshalAs(UnmanagedType.ByValTStr,SizeConst=12)]publicstringTransAmount;}SPOS.Requestres=newSPOS.Request();res.TransAmount=“000000000012”;intret=SPOS.MapService(refres);代码中定义了TransAmount为12位,传入的也是12位,但是跟踪发现,最后调用MapService后变为了11位[2014-10-1616:32:20][Interface][MapService.cpp][L0154][DEBUG]request->TransAmount:=[00000000001]是什么原因造成的呢?

解决方案

解决方案二:
NULL也需要空间的。
解决方案三:
你想知道什么原因造成的,应该先做以下测试:将位数改为20位,那么最后是变成19位,还是11位?将位数改为11位以下,会不会丢失?
解决方案四:
引用1楼Saleayas的回复:

NULL也需要空间的。

如何处理才能保证数据完整性呢?
解决方案五:
引用2楼Z65443344的回复:

你想知道什么原因造成的,应该先做以下测试:将位数改为20位,那么最后是变成19位,还是11位?将位数改为11位以下,会不会丢失?

20和11是临界值么?改为其它位数是都丢失的

时间: 2024-10-31 21:42:25

C#调用C++dll传入参数后位数丢失的相关文章

C#调用VC DLL 输出参数 急!!!

问题描述 被调dll函数ykt_readopencardno_local(char*pRegion,char*pDeptid,char*pDeptKey,char*pCardtype,char*pCardno,char*pWarnmsg,char*pErrmsg);C#调用代码:[DllImport("kernel32.dll")]privateexternstaticIntPtrLoadLibrary(Stringpath);[DllImport("kernel32.dll

C#调用C++DLL时参数该如何对应

问题描述 如题,原来的程序是用C++编写的,加载了DLL调用如下(可知DLL中的函数名和参数)typedefint(*pGetSubEngineID)(char*modelName,int*sID,double*sModelStepSize);typedefint(*pGetBaseStepSize)(double*StepSize);typedefint(*pInitDataBus)();typedefint(*pReleaseDataBus)();typedefint(*pSimDataWr

关于c#调用动态链接库DLL的参数设置

问题描述 libeay32.dll-------------------------------------------函数原型:voidAES_decrypt(constunsignedchar*in,unsignedchar*out,constAES_KEY*key)AES_KEY:structaes_key_st{#ifdefAES_LONGunsignedlongrd_key[4*(AES_MAXNR+1)];#elseunsignedintrd_key[4*(AES_MAXNR+1)]

C++函数的传入参数是指针的指针(**)的详解

要修改变量的值,需要使用变量类型的指针作为参数或者变量的引用.如果变量是一般类型的变量,例如int,则需要使用int 类型的指针类型int *作为参数或者int的引用类型int&.但是如果变量类型是指针类型,例如char*,那么需要使用该类型的指针,即指向指针的指针类型 char* *,或者该类型的引用类型char*&.   首先要清楚  不管是指针还是值传入函数后都会创建一个副本,函数结束后值内容不能传出来是因为值的副本,而传入的值并没被修改,指针能传出来是因为我们修改的是指针指向的内容

dll窗体及数据调用-delphi DLL数据及窗体调用

问题描述 delphi DLL数据及窗体调用 DLL工程文件代码: library DLLUSERS; uses Windows, ADODB, Dialogs, Forms, SysUtils, Classes, U_DataModule in 'U_DataModule.pas' {DataModule1: TDataModule}, U_Users in 'U_Users.pas' {Frm_Users}, U_Initialize in 'U_Initialize.pas'; {$R *

c#-C#调用C++ dll的参数转换问题,如何转换char **类型的参数到C#

问题描述 C#调用C++ dll的参数转换问题,如何转换char **类型的参数到C# 这是C++代码 DLL_API int Onvif_Discovery(char** deviceaddress, int* nDevices); 这是C#调用 [DllImport("OnvifDll.dll",EntryPoint="Onvif_Discovery", CharSet=CharSet.Ansi,CallingConvention=CallingConventi

delphi调用c++ dll参数char* 的问题

问题描述 delphi调用c++ dll参数char* 的问题 我有一个c作的dll 具体说明如下 1.文件解密接口函数及参数说明: int stdcall DecodeFile(char* InFile, //要解密的文件 char* Key, //解密的密钥 char* OutFile, //解密后的文件,在解密路径下的同名XML文件 char* Info); //提示信息函数返回 0 成功,非0失败. 2.动态调用实例: String jmfile = 要解密的文件路径; String k

在matlab中怎么调用java程序,求指教,不需要传入参数,只需要在matlab中启动java程序

问题描述 在matlab中怎么调用java程序,求指教,不需要传入参数,只需要在matlab中启动java程序 不需要传入参数,只需要在matlab中启动java程序,java读取个文件在处理文件后保存就行 解决方案 很简单的,matlab的界面都是java写的,网上教程也很多.

C#中调用C++写的dll,参数类型为char*[]怎么处理啊

问题描述 C#中调用C++写的dll的时候,传入参数类型为char*path[],即一个char*的数组,请问在C#中这个类型应该怎么写,之前我写过char*类型的,对应的C#中的类型是StringBuilder,那么如果是char*[]类型的话,可以用StringBuilder吗我用了但是不对,求高手指点啊~~~ 解决方案 解决方案二:不需要针对类型做太多要求,指针其实就是C#中的引用类型,他需要你给他一个存储数组的数组的地址,你完全可以用一个list<>来存储需要的数组,list<s