C#调用C++编写的DLL函数各种参数传递问题

C#调用C++编写的DLL函数各种参数传递问题
  1. 不返回值的参数
  C++ 原型:
  bool SendNewSms(char *szTel, char *szMessage);
  C#引用;
  [DllImport( "CdmaCard.dll",EntryPoint="SendNewSms")]
  public static extern bool SendNewSms(string phone,string msg);
  2. 带返回值(char *)
  C++原型:
  BOOL GetCardErrorMessage(char *szErrorMessage , int errorCode);
  C#引用
  [DllImport( "CdmaCard.dll",EntryPoint="GetCardErrorMessage")]
  public static extern int GetCardErrorMessage(StringBuilder msg,int errorCode); 永芳
  StringBuilder buf = new StringBuilder(1024);//指定的Buf大小必须大于可能的最大长度
  GetCardErrorMessage(buf,1);
  3. 带返回值(其他类型)
  C++原型:
  BOOL GetSmsSaveStation (int *nSmsStation);
  C#引用
  [DllImport( "CdmaCard.dll",EntryPoint="GetSmsSaveStation")]
  public static extern bool GetSmsSaveStation(ref int nStation);
  4. 传递结构体指针(C++填充)
  C++原型:
  struct NET_INFO_STRUCT
  {
  DWORD nDurationTime; //持续时间
  double nReceiveByte; //接收字节
  double nSendByte; //发送字节
无水硫铝酸钙  };
  BOOL NetGetConnectDetail(NET_INFO_STRUCT *lpNetInfo);
  C#引用
  public struct NET_INFO_STRUCT
  {
  public uint nDurationTime; //持续时间
  public double nReceiveByte; //接收字节
  public double nSendByte; //发送字节
  }
  [DllImport( "CdmaCard.dll",EntryPoint="NetGetConnectDetail")]
  public static extern int NetGetConnectDetail(ref NET_INFO_STRUCT pNetInfo);
徐州东方集团我还缺少什么  NET_INFO_STRUCT netInfo = new NET_INFO_STRUCT();
  NetGetConnectDetail(ref netInfo);
  5. 传递结构体数组(C++来填充)
  C++原型:
  struct UIM_BOOK_STRUCT
  {
  int UimIndex;
  char szName[15];
  char szPhone[21];
  };
  int ReadUimAllBook(UIM_BOOK_STRUCT lpUimBookItem[],int nMaxArraySize);
  C#引用
  [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]//可以指定编码类型
  public struct UIM_BOOK_STRUCT
  {
  public int UimIndex;
企业家天地杂志社
  [MarshalAs(UnmanagedType.ByValTStr, SizeConst= 15)]
  public string szName;
  [MarshalAs(UnmanagedType.ByValTStr, SizeConst= 21)]
  public string szPhone;
  };
  [DllImport( "CdmaCard.dll",EntryPoint="ReadUimAllBook")]
  public static extern int ReadUimAllBook([Out] UIM_BOOK_STRUCT [] lpUimBookItem,int nMaxArraySize);
  UIM_BOOK_STRUCT[] p = new UIM_BOOK_STRUCT[20];
  int ret = ReadUimAllBook(p,p.Length);
  6. 注意问题
  类型不一致,会导致调用失败,
  (1) long 类型,在C++中是4字节的整数,在C#中是8字节
的整数;
  (2) 字符串类型的设置不正确;
  以下是几个简单的window调用
华南钢铁交易网  [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously
  [DllImport("User32.dll", CharSet=CharSet.Auto)]
  public static extern bool ScreenToClient(IntPtr hWnd, ref System.Drawing.Point rect);
  [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously
  [DllImport("User32.dll", CharSet=CharSet.Auto)]
  public static extern bool GetWindowRect(IntPtr hWnd, out System.Drawing.Rectangle rect);
  [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously
  [DllImport("User32.dll", CharSet=CharSet.Auto)]
  public static extern bool UnregisterClass([MarshalAs(UnmanagedType.LPTStr)] string className, IntPtr instanceHandle); 

本文发布于:2024-09-20 22:49:34,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/659952.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:类型   字节   调用   结构   传递   问题
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议