日期:2014-05-20  浏览次数:20846 次

C#调用C++写的dll问题?
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   传值有问题
请高手指教


------解决方案--------------------
如果其他的函数返回是对的,那应该不是象楼上说的是函数定义的问题.毕竟同一个DLL里的函数的编写方式应该是一样的.

------解决方案--------------------
[DllImport( "CR.dll ")]
public static extern int CRT310_Reset(IntPtr ComHandle, System.Byte _Eject);

System.Byte flag = 0x31;
int crt = CRT310_Reset(ComHandle, flag );