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等类型是固定长度。

    

最新文章

  1. Ubuntu 16.04 几个国内更新源
  2. Greedy:Linear world(POJ 2674)
  3. Spark RDD操作(1)
  4. java--依赖、关联、聚合和组合之间区别的理解
  5. Java笔记(二十五)……其他常用API
  6. poj 2975 Nim(博弈)
  7. Notepad++中查找替换回车符
  8. redis在Java web项目的简单应用(转载)
  9. Freemarker常用技巧(三)
  10. ucenter 通信原理个人总结
  11. C# Winform中DataGridView的DataGridViewCheckBoxColumn CheckBox选中判断
  12. SQL SERVER中如何格式化日期(转)
  13. C#:判断当前程序是否通过管理员运行
  14. 关于v-model、v-for、v-on的用法
  15. [刷题]算法竞赛入门经典(第2版) 4-8/UVa12108 - Extraordinarily Tired Students
  16. Linux学习--进程概念
  17. Java基础系列--04_数组
  18. springmvc ajax tomcat简单配置实现跨域访问
  19. C#虚函数virtual详解
  20. ibatis实战之插入数据(自动生成主键)

热门文章

  1. ubuntu16.04 彻底卸载MySQL
  2. 知识点-jar包
  3. kafka产生的数据通过Flume存到HDFS中
  4. Spring事务管理的demo
  5. plugin 看不到update按钮
  6. 3-自己动手写HashMap 增加哈希算法
  7. (转)C# WebApi 跨域问题解决方案:CORS
  8. Java - 18 Java Scanner 类
  9. Tomcat+Nginx+Redis+MySQL实现反向代理、负载均衡、session共享
  10. vue实现点击、滑动右侧字母对应各个城市