zoukankan      html  css  js  c++  java
  • C# 加载C++创建的动态链接库dll

    创建dll

    1.打开vs,点击文件-->新建-->项目。

    2.选择C++下面的windows桌面,右边选择动态链接库(DLL)。新建成功之后,默认为x86平台。

    按照你自己的需求更换平台,必须调用的和被调用的dll同为一个平台。

    3.新建之后,在头文件中添加mydll.h,内容为:

    #define DLL_API extern "C" _declspec(dllexport)

    4.mydll.cpp为以下内容(需要调用的函数)以两个int相加为例。

    1.  
      DLL_API int add(int x, int y)
    2.  
      {
    3.  
      return x + y;
    4.  
      }

    5.点击生成--->生成解决方案。

    6.如果创建完成没有更换调试平台(x86)的话,生成的dll文件会保存在Debug文件夹下。如果选择为x64平台下面的话,dll文件会放在x64文件夹下的Debug文件夹下。

    7.到这里动态链接库dll就创建完成了。

    转自:链接

    C#调用动态链接库的方法:

    C#调用动态链接库方法

    1.  
      [DllImport("mydll.dll")]
    2.  
      public static extern int Add(int a,int b);
    3.  
       
    4.  
      private void btn_add_Click(object sender, EventArgs e)
    5.  
      {
    6.  
      int sum=Add(5,6);
    7.  
      MessageBox.Show(sum.Tostring());
    8.  
      }

    如果需要调用同一个dll文件中的两个不同函数,则需要再次引动dll

    1.  
      [DllImport("mydll.dll")]
    2.  
      public static extern void change();
    3.  
      [DllImport("mydll.dll")]
    4.  
      public static extern void line(out double left,out double right);

    出现问题列表:

    1.找不到函数入口点

    解决方法:大部分原因是在创建dll文件时,dll文件的函数没有添加 extern "C"   或 __declspec(dllexport)。

    2.正尝试在 OS 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起。

    解决方法:

    1、把VS菜单的 调试->异常->Managed Debuggin Assistants->LoaderLock 的选中状态去掉。
    2、如果异常(exception)这一项没有的话,在工具---自定义---命令选项卡---左边选择调试--右边把异常托到菜单里。
    3、快捷键Ctrl+Alt+E,修改Managed Debuggin Assistants->LoaderLock 的选中状态去掉。

    3.试图加载格式不正确。

    解决方法:

    出现这个报错,主要原因是dll与C#不在同一平台导致。如果dll使用x64,而C#也需要选为x64。

  • 相关阅读:
    深入理解CSS中的margin负值
    深入理解CSS浮动
    深入理解CSS绝对定位
    深入理解display属性
    JAVA-初步认识-第四章-内存空间的划分&栈内存&堆内存
    JAVA-初步认识-第四章-数组-概述和定义
    JAVA-初步认识-第四章-重载练习
    JAVA-初步认识-第四章-重载
    JAVA-初步认识-第四章-函数-内存加载过程
    JAVA-初步认识-第一章-整体的认识
  • 原文地址:https://www.cnblogs.com/-hwh/p/13402623.html
Copyright © 2011-2022 走看看