C++ 函数
int APIENTRY CR_Reset(HANDLE ComHandle, BYTE _Eject );
//参数
//_Eject:弹卡选择 0x30=不弹卡 0x31=弹卡到前端 0x32=弹卡到后端。
//返回值:
//如果函数调用成功,返回值为0。
c# 调用
[DllImport("CR.dll", EntryPoint = "CR_Reset", SetLastError = true,
CharSet = CharSet.Ansi, ExactSpelling = true,
CallingConvention = CallingConvention.StdCall)]
public static extern int CRT310_Reset(IntPtr ComHandle, System.Byte _Eject);System.Byte flag = 0x31;
crt = CRT310_Reset(ComHandle, Convert.ToByte(flag));这样写有问题吗?为什么返回值不等于0
是不是BYTE 传值有问题
请高手指教
int APIENTRY CR_Reset(HANDLE ComHandle, BYTE _Eject );
//参数
//_Eject:弹卡选择 0x30=不弹卡 0x31=弹卡到前端 0x32=弹卡到后端。
//返回值:
//如果函数调用成功,返回值为0。
c# 调用
[DllImport("CR.dll", EntryPoint = "CR_Reset", SetLastError = true,
CharSet = CharSet.Ansi, ExactSpelling = true,
CallingConvention = CallingConvention.StdCall)]
public static extern int CRT310_Reset(IntPtr ComHandle, System.Byte _Eject);System.Byte flag = 0x31;
crt = CRT310_Reset(ComHandle, Convert.ToByte(flag));这样写有问题吗?为什么返回值不等于0
是不是BYTE 传值有问题
请高手指教
这样应该就可以了,试试看吧^_
^
不好意思
这里写错了
CRT310_Reset(ComHandle, Convert.ToByte(flag));
应该是CR_Reset(ComHandle, Convert.ToByte(flag));
DLL代码大约是这样的
....
return Operation(XXXX);
}
Operation(XXXX)这个函数执行会返回一个int型的值,这样用C#调用就是出错,用C++调用正常我们把DLL改成
...
int res = Operation(XXXX);
return res;
}
用C#调用才正常,一直不知道是什么原因,希望高手讲解下...
楼主也试试这个方法看能解决你的问题不
你用十六进制和十进制只是表现形式不一样,实际的值是一样的
这个不是需要考虑的地方
public static extern int CRT310_Reset(IntPtr ComHandle, System.Byte _Eject);System.Byte flag = 0x31;
int crt = CRT310_Reset(ComHandle, flag );