我要调用c++里的这个函数
char* BuildPackage(int &nPackageLen,int nSerialNo, byte byFlag, _int64 HostID, _int64 DestID,
byte byPkgType, short nFuncNum, int nPkgDateLen, char* pszPkgDate, byte byVer = ENTP_PROTOCAL_VERSION,
char *pszPassword =NULL, short nReturnCode = 0,short nTpNum = 0, short nCpNum =0, char* pszAddtion=NULL);
我在c#调用如下:
[System.Runtime.InteropServices.DllImport("D:\\test\\bin\\Debug\\DiDiprotocald.dll", EntryPoint = "?BuildReponsePackage@CDiDiGateWayProtocal@@QAEPADAAHF@Z", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern StringBuilder BuildPackage(string nPackageLen, int nSerialNo, byte byFlag, long HostID, long DestID, byte byPkgType, short nFuncNum, int nPkgDateLen, ref string pszPkgDate, byte byVer, ref string pszPassword, short nReturnCode, short nTpNum, short nCpNum, ref string pszAddtion);
小弟初来csdn没分。送不了分,请好心人帮帮忙!!!急。,。,万分感谢!
char* BuildPackage(int &nPackageLen,int nSerialNo, byte byFlag, _int64 HostID, _int64 DestID,
byte byPkgType, short nFuncNum, int nPkgDateLen, char* pszPkgDate, byte byVer = ENTP_PROTOCAL_VERSION,
char *pszPassword =NULL, short nReturnCode = 0,short nTpNum = 0, short nCpNum =0, char* pszAddtion=NULL);
我在c#调用如下:
[System.Runtime.InteropServices.DllImport("D:\\test\\bin\\Debug\\DiDiprotocald.dll", EntryPoint = "?BuildReponsePackage@CDiDiGateWayProtocal@@QAEPADAAHF@Z", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern StringBuilder BuildPackage(string nPackageLen, int nSerialNo, byte byFlag, long HostID, long DestID, byte byPkgType, short nFuncNum, int nPkgDateLen, ref string pszPkgDate, byte byVer, ref string pszPassword, short nReturnCode, short nTpNum, short nCpNum, ref string pszAddtion);
小弟初来csdn没分。送不了分,请好心人帮帮忙!!!急。,。,万分感谢!
解决方案 »
- 关于combox控件的绑定
- datagridview自定义行的显示
- C#如何实现单击TABLE行后,使本表的该行颜色变掉
- 关于DLL与EXE之间的通信问题
- C#,windowsApp,datagrid,怎样固定行幅和列幅?
- 如何把InfoPath的表格嵌入到各种宿主应用程序中,包括Windows窗体、Microsoft Office 文档以及 Microsoft Internet Explorer等。
- 请问FolderNameEditor在那个命名空间
- 刚装上了CS2.1并升级到了ASP.NET2.0, 出现一个"正在中止线程"的错误???
- 如何在datagrid控件中进行增、删、保存、查询操作呢,还有可以对如何让分组数据在datagrid控件中显示呢
- WebForm中Javascript函数如何调用cs文件中申明的变量?
- 各位帮忙看一个算法问题,数组的,C#代码
- 请问ActiveReports打包疑问?
int nSerialNo, byte byFlag, long HostID, long DestID, byte byPkgType, short nFuncNum, int nPkgDateLen, ref string pszPkgDate, byte byVer, ref string pszPassword, short nReturnCode, short nTpNum, short nCpNum, ref string pszAddtion);
public static extern StringBuilder BuildPackage(ref int nPackageLen, int nSerialNo, byte byFlag, long HostID, long DestID, byte byPkgType, short nFuncNum, int nPkgDateLen, StringBuilder pszPkgDate, byte byVer, StringBuilder pszPassword, short nReturnCode, short nTpNum, short nCpNum, StringBuilder pszAddtion);
调用 BuildPackage(char *&ptrPackageOutput,int &nPackageLen,int nSerialNo,byte Flag, char *chDESPassword,short shTPNum,short shCPNum,char *VIN, byte PackageType,short shFunctionNo,short shReturnCode, int nDataLength,char *ptrData)
填入必要参数(有的参数可以为空),成功建立后会将结果返回到ptrPackageOutput(指明包起始地址)和nPackageLen(指明报长度);我在C#里面调用如下:
[System.Runtime.InteropServices.DllImport("D:\\test\\bin\\Debug\\ProtocolAnalysorLib.dll", EntryPoint = "?BuildPackage@CProtocolAnalysor@ASNS@@QAEPADAAHHEPADFF1EFFH1@Z", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern void BuildPackage([Out] StringBuilder ptrPackageOutput,[Out] IntPtr nPackageLen,int nSerialNo,byte Flag,string chDESPassword,short shTPNum,short shCPNum,string VIN,byte PackageType,short shFunctionNo,short shReturnCode,int nDataLength,string ptrData);高手进来帮帮忙 我怀疑出错的就是那2个输出的参数,不知道怎么弄
[Out] StringBuilder ptrPackageOutput,
换成
string ptrPackageOutput
试试.既然你能更改C++中Dll文件中的代码, 那就将前面两个输出参数分开来测试一下. 这样会使你更容易找到出错的原因.
改成这样也不行
public static extern System.IntPtr BuildPackage(out int nPackageLen, int nSerialNo, System.Byte Flag, System.IntPtr chDESPassword, short shTPNum, short shCPNum, System.IntPtr VIN, System.Byte PackageType, short shFunctionNo, short shReturnCode, int nDataLength, System.IntPtr ptrData);