最近项目上需要在C#中调用C++,期间遇到不少坑,总结如下:
入参
c++ => c#
long => int
LPSTR => string
出参
c++ => c#
__int64 * => ref Int64
long * =>ref int
char* =>StringBuilder
1.in const char* 对应C#中string 或 IntPtr
2.out const char* 对应C#中的StringBuilder
3.inout const char* 对应C#中的StringBuilder
4.const char *作为返回值类型,对应C#中IntPtr
5.char** 对应C#中ref System.IntPtr
6.in const char* 有时候需要传入二进制数组数据,即对应byte[]
7.读取文件可以通过FileStream和StreamReader,区别是FileStream为二进制流,StreamReader为字符串流
long CapCardQuickPay(long opFare, long objNo, LPSTR jyDT,long code, LPSTR password, char* serialNo, char* saler, char* termId, long *balance);
[DllImport("Change.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
public static extern int CapCardQuickPay(int opFare, int objNo, string jyDT, int posCode, string password, StringBuilder serialNo, StringBuilder saler, StringBuilder termId, ref int balance);