1、C++中需要导出的函数,函数定义处在返回值前加上:extern "C" __declspec(dllexport)

  C#调用:[DllImport("导出函数所在DLL名", EntryPoint = "函数名")]
       static extern unsafe 函数定义

  代码示例:

    C++导出: #define DllExport extern "C" __declspec(dllexport)

          DllExport void __stdcall GetVersion_SW(char* pVersion)  {  ……函数定义  }

    C# 调用:  [DllImport("DllExportDemo.dll", EntryPoint = "GetVersion_SW")]
                 static extern unsafe void GetVersion(char* pVersion);

          unsafe
                  {

      IntPtr pStr = Marshal.AllocHGlobal(100);

      GetVersion((char*)pStr);
                      string VersionStr = new string((SByte*)pStr);

      Marshal.FreeHGlobal(pStr);
          }

2、C++中需要导出的类,类定义处在类名前加上:__declspec(dllexport)

  C++调用:加入导出类所在头文件和导出类所在DLL的静态库文件(DLL名.lib)

       使用处引用该头文件后,和普通类一样使用。

  注:C#不能直接使用DLL中导出的C++类

  代码示例:

    C++导出: #define DllExport __declspec(dllexport)
          class DllExport MyClass
          {
            public:
              MyClass();
              ~MyClass();

              void Show();

              private:

          };

    C++调用: #include "MyClass.h" (MyClass类定义所在头文件)

          MyClass* testClass = new MyClass();

          testClass->Show();
  

3、注意点:

  (1)、函数参数类型需按照所占位数一 一对应:

    例:C#中的ulong对应C++中的ULONG64,而非ULONG。

    注:原因是C++中long、int等类型的长度和平台相关,C#中的long、int等类型是固定长度。

    

DLL创建与调用(C#调用C++的DLL)的更多相关文章

  1. 在VS2015中用C++创建DLL并用C#调用且同时实现对DLL的调试

    from:http://m.blog.csdn.net/article/details?id=51075023 在VS2015中先创建C#项目,然后再创建要编写的动态库DLL项目,这样做的好处是整个解 ...

  2. delphi dll创建及调用

    第一章 DLL简单介绍由于在目前的学习工作中,需要用到DLL文件,就学习了下,在这里作个总结.首先装简单介绍下DLL:1,减小可执行文件的大小DLL技术的产生有很大一部分原因是为了减小可执行文件的大小 ...

  3. 编译可供C#调用的C/C++动态链接库dll文件

    编译可供C#调用的C/C++动态链接库dll文件,C语言控制台应用程序,探索生成dll过程 由于项目需求,需要公司另一个团队提供相关算法支持,是用C语言编译好的dll库提供给我们进行调用. 但是拿到d ...

  4. VS2010编写动态链接库DLL及单元测试用例,调用DLL测试正确性

    转自:http://blog.csdn.net/testcs_dn/article/details/27237509 本文将创建一个简单的动态链接库,并编写一个控制台应用程序使用该动态链接库,该动态链 ...

  5. (转)C#调用非托管Win 32 DLL

    转载学习收藏,原文地址http://www.cnblogs.com/mywebname/articles/2291876.html 背景 在项目过程中,有时候你需要调用非C#编写的DLL文件,尤其在使 ...

  6. C++如何调用C#编写的 DLL

    由于C#编绎出来的DLL不是计算机所能直接识别的二进制指令码,需要CLS进行再解释,说到这,我想有些朋友应该知道C#项目需要引用C++编写的DLL时,可以直接引用DLLMPORT来实现调用,而反向的话 ...

  7. Delphi - Windows系统下,Delphi调用API函数和7z.dll动态库,自动把文件压缩成.tar.gz格式的文件

    项目背景 应欧美客户需求,需要将文件压缩成.tar.gz格式的文件,并上传给客户端SFTP服务器. 你懂的,7-Zip软件的显著特点是文件越大压缩比越高,在Linux系统上相当于我们Windows系统 ...

  8. 22.编写一个类A,该类创建的对象可以调用方法showA输出小写的英文字母表。然后再编写一个A类的子类B,子类B创建的对象不仅可以调用方法showA输出小写的英文字母表,而且可以调用子类新增的方法showB输出大写的英文字母表。最后编写主类C,在主类的main方法 中测试类A与类B。

    22.编写一个类A,该类创建的对象可以调用方法showA输出小写的英文字母表.然后再编写一个A类的子类B,子类B创建的对象不仅可以调用方法showA输出小写的英文字母表,而且可以调用子类新增的方法sh ...

  9. C# 调用C++/MFC写的dll

    C#调用C++的非托管类的dll其实很简单基本就是固定的调用格式. dll的编写,首先是打开VS新建一个C++的控制台程序,下一步后选择dll以及空文档即可.然后就是添加一个类添加一个方法.方法排头固 ...

  10. AutoCAD.NET 不使用P/Invoke方式调用acad.exe或accore.dll中的接口(如acedCommand、acedPostCommand等)

    使用C#进行AutoCAD二次开发,有时候由于C#接口不够完善,或者低版本AutoCAD中的接口缺少,有些工作不能直接通过C#接口来实现,所以需要通过P/Invoke的方式调用AutoCAD的其他DL ...

随机推荐

  1. 固态硬盘使用简要手册——windows平台

    第一步,请安装它. 第二步,请关闭磁盘整理功能,如图 详细:控制面板--管理工具--任务计划程序 打开界面,设置如下 图1 第三步:预读(Superfetch)和快速搜索(Windows Search ...

  2. Dubbo(4)消费Dubbo服务

    消费就是一个远程调用服务的过程: 1.项目结构:     2.项目依赖pom.xml: <project xmlns="http://maven.apache.org/POM/4.0. ...

  3. ntp服务问题

    原本国内的主机直接指向阿里云就可以时间同步了  但是国外的主机 却有报错  这个报错还没有解决 1 Oct 03:47:30 ntpdate[20969]: no server suitable fo ...

  4. docker启动时报错Error response from daemon: driver failed programming external connectivity on endpoint *

    公司服务器由于断电重启,部署在docker服务上的一些web服务需要重新开启容器, [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND C ...

  5. [UE4]AWP狙击枪开镜

    一.使用一张PNG图片,中间是透明的,其他部分是纯黑色.创建一个UserWidget.作为AWP的开镜后的准心.AWP默认状态下是没有准心的. 二.右键开镜.把第一步创建的UserWidget创建出来 ...

  6. [UE4]运行时进入观察模式

  7. 第11课 std::bind和std::function(2)_std::bind绑定器

    1. 温故知新:std::bind1st和std::bind2nd (1)bind1st.bind2nd首先它们都是函数模板,用于将参数绑定到可调用对象(如函数.仿函数等)的第1个或第2个参数上. ( ...

  8. delphi正则表达式学习笔记(二)

    正则表达式大全 字符 描述 \ 将下一个字符标记为一个特殊字符.或一个原义字符.或一个向后引用.或一个八进制转义符.例如,"n"匹配字符"n"."\n ...

  9. C#深入解析委托——C#中为什么要引入委托

    引言: 对于一些刚接触C# 不久的朋友可能会对C#中一些基本特性理解的不是很深,然而这些知识也是面试时面试官经常会问到的问题,所以我觉得有必要和一些接触C#不久的朋友分享下关于C#基础知识的文章,所以 ...

  10. python数据类型总结

    按存值个数区分 标量/原子类型 数字,字符串 容器类型 列表,元组,字典 按可变不可变区分 可变 列表,字典 不可变 数字,字符串,元组 按访问顺序区分 直接访问 数字 顺序访问(序列类型) 字符串, ...