----在网上查了一个星期,终于找到解决方法

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) 字符串类型的设置不正确;

转载于:https://www.cnblogs.com/kun91101/p/3190891.html

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

  1. 【转】Linux下c++调用自己编写的matlab函数:通过mcc动态链接库.so实现

    转自:Linux下c++调用自己编写的matlab函数:通过mcc动态链接库.so实现_Jaster_wisdom的专栏-CSDN博客 之前在这里和这里调用了matlab自带的一些函数,是通过matl ...

  2. oracle sql 调用自定义函数_PSCAD入门教程(第7节):怎样调用fortran编写的自定义函数?(附模型)...

    PSCAD入门教程(第7节):怎样调用fortran编写的自定义函数?(附模型)​mp.weixin.qq.com https://www.zhihu.com/video/12422083467175 ...

  3. 阿里云服务器上调用自己编写的matlab函数

    该博客为<Ubuntu 相关>系列博客的第五篇,该系列博客主要对Ubuntu安装各种软件或者库进行一个记录,方便重装系统后快速恢复工作. 这是进项目组以来接受的第一个任务的后续工作,以此记 ...

  4. pb调用c语言dll,PB调用C#编写的Dll类库

    在c# 中编写com组件,供PB调用实例 前言:c#中写的dll直接是不能被pb调用的,只有写成com组件才可以调用,所以用c#写dll时要注意. c#中新建类库 类库类型为通用类库,项目名为AddC ...

  5. java Jacob调用VB编写的DLL(COM组件)

    项目上有调用Visual Basic 6.0编写的DLL文件的需求,在使用JNA调用无果后,在网上找了部分资料,整理如下. 为什么用JNA无法调用? VB生成的COM组件,虽然是dll后缀,但事实上, ...

  6. python调用c#注意事项_Python调用C#编写的DLL

    起因是工作中需要用的开发编写的DLL,但是它是使用C#编写的,本人不想使用C#去写测试代码,所以需要使用Python来掉这个DLL内的方法 就用这个就很好,不要问为啥不用微软的Ironpython和别 ...

  7. java调用c写的dll jna_jna调用c编写的dll

    我们团队目前开发的产品是用java语言编写的,大家都知道,java编写的代码随便都可以被反编译,导致别人可能会看到你"裸奔"的样子.所以,为了避免这种安全隐患,团队最终商定,将部分 ...

  8. 易语言c调用,易语言调用C++编写的DLL

    511遇见网站最近在录制一套易语言编写DLL及调用和Hook,今天记录一下使用VS2015编写一个C++的Dll,易语言来调用. 步骤: 1.启动VS2015 2.创建工程 3.Visual C++ ...

  9. vs2013 c# 中调用 c 编写的dll出错的可能错误

    先说出错原因:    堆栈调用顺序  解决办法:     使用   __stdcall 或 使用C#属性 CallingConvention 起因是我想在c#中调用c函数结果出错了 如下 C 头文件 ...

最新文章

  1. Hyper-V 2节点集群高可用的限制
  2. mysql和redis的区别
  3. 计算机网络系统中每台计算机的地位是什么,东北师范计算机应用基础15秋在线作业1满分答案...
  4. MySQL存储引擎中的MyISAM和InnoDB区别详解
  5. [转] Deep Learning(深度学习)学习笔记整理系列
  6. axure中的中继器
  7. 软件项目风险管理介绍
  8. ThinkPad预装win8系统机型安装win7系统的操作指导
  9. 安卓总结 之 OkHttp使用及源码分析(三)
  10. Electron - 创建跨平台的桌面客户的应用程序
  11. 达到年薪 40W 必需掌握的技术
  12. python 存储图片 alpha_保存时Matplotlib图形面颜色alpha(背景色、透明度)
  13. Valgrind快速入门指南
  14. Sql Server REPLACE函数的使用
  15. extract-text-webpack-plugin用法
  16. 骑马与砍杀是用python编的_骑马与砍杀编辑模式怎么用
  17. Python多线程报错之RuntimeError
  18. 【优化选址】基于matlab遗传算法求解多城市多应急物流中心选址优化问题【含Matlab源码 H001期】
  19. WinForm公共控件
  20. 使用神经网络实现对天气的预测

热门文章

  1. Python Django HttpResponse响应json数据
  2. Python Django 数据缓存存储位置类
  3. kibana操作elasticsearch:修改数据
  4. VMware快照管理器
  5. Java客户端操作elasticsearch--查询索引库
  6. Snuke Festival(二分法)
  7. Ubuntu平台 Qt 5.x 安装方法
  8. Android NDK 学习汇总
  9. linux系统硬盘4k对齐,linux查看硬盘4K对齐方法
  10. python的文件式如何操作_Python文件操作