从 C# 调用 C++ DLL

2024-06-26

我想使用 C# 中的 C++ DLL。 C++ DLL 是win32 控制台应用程序。我已成功调用它,并希望在 C# 中处理来自 C++ 的数据。然而,C# 应用程序在执行 DLL 后退出,即这一行:GetArrayFromDLL();

我是 C# 和 Visual C++ 新手。有人可以提供一些建议吗?

Thanks

namespace ConsoleApplication1
{
    class Program
    {

        [DllImport("Lidar_DataCal_CDLL.dll")]

        public static extern void GetArrayFromDLL();



        static void Main(string[] args)
        {
            Console.WriteLine("This is C# program");
            GetArrayFromDLL();
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());

        }
    }
}

这是我在win32应用程序中编写的DLL。

extern "C"
{
  __declspec(dllexport) void GetArrayFromDLL()
  {

/// Reading hex from a file 

  FILE * pFile;

  FILE * f;

  signed int array_data[81],array_data1[81],i;

  double fangle,fsin,fcos,fangle_rad;

  double afx[81],afy[81];

  int px,py;

  char file_read[20] = "scandataset1.txt";

  char file_write[20] = "xycordinates1.txt";


  pFile = fopen ( file_read,"a+");

  if (pFile != NULL)

      {
  for (i=0;i<80;i++)

      {
       char buffer[3];

       fscanf (pFile, "%x",&array_data[i]);

      sprintf ( buffer ,"%d", array_data[i]);

      printf ( "I have read: %s \n\n", buffer);

      array_data1[i] = atoi(buffer);

       // finding angle 

       fangle = 20 -( (i+1-1)*0.5);

       fangle_rad = (PI*fangle/180);

       fsin = -sin(fangle_rad);

       fcos =  cos(fangle_rad);

       afx[i] = array_data[i] * fsin;

       afy[i] = array_data[i] * fcos;

      // printf ("X: %lf  and Y: %lf  \n\n",afx[i],afy[i]);

       f = fopen(file_write,"a+");

       if(f != NULL);

       fprintf(f,"%lf %lf\n",afx[i],afy[i]);

       fclose (f);

      } 
      }
  else
      {

      printf("Error opening fail");

      }

  fclose (pFile);
      }

    }

基本上只有两种直接的方法来调用 C++ 方法。要么围绕面向对象的接口创建 C 可调用的包装器(函数),这使其独立于语言,但并不总是完全美观或可维护,或者您可以在 C# 和 C++ 之间使用面向对象的粘合语言。

在 .NET 1.1 中,粘合语言是托管 C++(现已消失)。

它的后继语言 C++/CLI 可能是您的最佳选择。这种语言最适合仅用于托管和非托管世界之间相对较薄的一层,它能够很好地统一这一层。

(实际上:如果您使用 VS2010 并以 .NET 版本 4 之前的任何原因为目标,添加 C++/CLI 代码将强制您在系统上安装 VS 2008,但您仍然可以完全使用 VS2010 IDE 来处理所有三种语言.)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 C# 调用 C++ DLL 的相关文章

  • 遍历后加快数组查找速度?

    我有一个123MB大的int数组 它基本上是这样使用的 private static int data new int 32487834 static int eval int c int p data c 0 p data p c 1 p
  • gets 和 scanf 有什么区别?

    如果代码是 scanf s n message vs gets message 有什么区别 似乎两者都获取消息的输入 基本区别 参考您的特定场景 scanf 遇到一个时结束接受输入whitespace newline or EOF gets
  • 在 2 个 .c 文件之间共享函数

    dir1有dir2 file1 c和file1 h dir2 有 file2 c 现在 如果我想在 file2 c 中访问 file1 c 中定义的函数 我需要在 file1 h 中声明它并在 file2 c 中包含 file1 h 这是一
  • 在异步方法中使用时 HttpClient 标头被清空

    我正在使用 NET Framework 4 6 1 我的 Web api 中有一个控制器 其中有静态 HttpClient 来处理所有 http 请求 在 IIS 上托管我的应用程序后 大约每月一次 我的应用程序的所有传入请求都会出现以下异
  • 在 Windows 服务中使用 OleDb 从 Excel 读取数据?

    免责声明 我知道这是一种不好的做事方式 这是我们与客户的唯一选择 Problem 我们需要每隔 x 时间从 Excel 文件读取数据 数据通过第三方 Excel 插件不断变化 应用程序的环境是 Windows XP SP1 和 Net 2
  • VS2010中VSHost.exe不断启动

    我正在 VS2010 中使用一个包含大量项目的解决方案 但它不断变得无响应 我注意到的一件事可能是一条线索 尽管我尚未开始任何调试 但 MyApplicationName vshost exe 不断出现在进程列表中 也许每当构建发生时它就会
  • ObjectTrackingEnabled 和 linq-to-sql

    I read here http www sidarok com web blog content 2008 05 02 10 tips to improve your linq to sql application performance
  • 使用私有构造函数的 C# 单元测试类?

    好吧 我刚刚收到一个作业 我必须对具有私有构造函数的类执行单元测试 现在 当所有方法也都是非静态时 我该如何在不初始化类的情况下进行单元测试 有什么方法可以对具有私有构造函数的类进行单元测试 无需反射 如果您无法将类公开 您仍然可以通过以下
  • ASP.NET 中的 thread.sleep

    我正在为我的网站模拟彗星实时馈送协议 因此在我的控制器中我添加 while nothing new before timeout Thread Sleep 1000 但我注意到添加此功能后整个网站变慢了 调试后我得出结论 当我打电话时Thr
  • 第三方引用的 dll 未被复制来构建

    我有一个第三方 net dll 被我的 dll 类库项目 A 引用和使用 我的控制台应用程序项目 B 引用项目 A 我的问题是第三方 dll 没有被复制到控制台应用程序项目 B 的构建中 这里有什么问题呢 我的 dll 类库中引用的第三方
  • 如何“全局”捕获对象实例中引发的异常

    我目前正在编写一个 winforms 应用程序 C 我正在使用企业库异常处理块 遵循我所看到的相当标准的方法 IE 在 Program cs 的 Main 方法中 我已将事件处理程序连接到 Application ThreadExcepti
  • 简单的喷射器将具体类型与生活方式结合起来

    我正在寻找一种可以使用指定的生活方式注册具体类型的方法 基本上如下所示 public void SomeFunction Type concrete Lifestyle lifestyle gt container Register con
  • 如何在 Windows 8.1 上打开多个 Visual Studio 窗口? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我使用的是 Windows 7 我能够启动多个 Visual Studio 并同时工作 现在我有 Windows 8 1 操作系统 每当我
  • Subsonic 3 ActiveRecord 嵌套选择导致 NotIn 错误?

    我有以下 Subsonic 3 0 查询 其中包含嵌套的 NotIn 查询 public List
  • 将 R 值传递给采用 L 值的函数时出现过载歧义

    我有 2 个重载函数 一个采用 L 值 另一个采用 R 值 目的是让该函数可以像这样调用 Obj obj foo obj OR foo Obj 所以 我写了2个重载函数 template
  • 是否可以在 Eclipse 中为除 Java 之外的 Eclipse 编写插件?

    谁能帮我用c 写一个eclipse插件 weekens 和 celavek 感谢您提供的信息 我正在研究 JNI 并将尝试实现它 celavek 我们必须做什么样的主控 控制 在C 和java接口中处理是否风险更大 我的要求是在 Java
  • 更快的 WinSock sendto()

    我使用的是 Windows Server 2008 我的程序是用 C 编写的 我在 while true 循环中使用 WinSock2 和 sendto 来发送数据包 代码如下 while true if c snd gt max c sn
  • 如何以一对一/零关系更新员工和身份用户

    我正在尝试更新员工记录 也想更新身份用户 如果我先单独更新身份用户 例如 UserManager Update user Context Entry employee State System Data Entity EntityState
  • Unity 错误“内部构建系统错误。后端退出,代码为 -1073740791。”摧毁/杀死了我的项目

    好吧 我可能在这里夸大了 但这是真的 当我开始打开它时 该项目由于错误 内部构建系统错误 后端退出 代码为 1073740791 而被破坏 应用程序 这个项目已经在Google Play上发布了 也许和设置有关 有人可以帮忙吗 完整错误 I
  • Json.net 将数字属性序列化为字符串

    我正在使用 JsonConvert SerializeObject 序列化模型对象 服务器期望所有字段都是字符串 我的模型对象具有数字属性和字符串属性 我无法向模型对象添加属性 有没有办法将所有属性值序列化为字符串 我必须只支持序列化 而不

随机推荐

  • 当用户从android后台删除应用程序时如何检测事件?

    当用户从后台删除我的应用程序时 我需要重置通知 所以我需要一个从后台删除应用程序的事件 请帮帮我 建议表示赞赏 谢谢 亲切的问候 官方安卓文档 Activity onDestroy 您的活动被销毁之前收到的最后一个电话 发生这种情况的原因可
  • 如何在 jQuery.ui.autocomplete 中的自动完成弹出窗口下方添加所有搜索的链接?

    我有使用 jQuery UI 自动完成插件的搜索建议自动完成功能 http jqueryui com autocomplete http jqueryui com autocomplete 但是如何添加结果弹出项目的底部 其行为类似于 Qu
  • JHipster:使用标准过滤实体 - 预期的 Angular 客户端方法

    我最近开始使用JHipster http www jhipster tech 感谢这个出色项目的维护者 在 JHipster 的当前版本 撰写本文时为 4 10 2 中 实体可以通过实体子生成器启用过滤 或者通过包含filter Entit
  • XDebug 与 Symfony 和 PhpStorm 不起作用(Ubuntu 安装)

    关于我的系统的事实乌班图15 10PHP 5 6 11交响乐2 7PhpStorm 10调试2 4我真的很难让 xdebug 在 PhpStorm 的 Symfony 项目下工作 我安装了xdebug 在我的 etc php5 apache
  • 高效编写航空公司路由算法

    Given 航班数据库 出发城市 到达城市 出发时间 到达时间 问题 如果出发时间不重要 那么在两个城市之间列出服务的最有效算法是什么 考虑到我们想要最小化中途停留时间 但仍高于标称最小值 即 20 分钟 并最小化中途停留次数 如果有直达航
  • Vimscript:如何获取正在运行 Vim 的操作系统?

    我有一个 vim 插件 可以在不同的机器上运行 有时需要根据 Windows Linux Mac 执行不同的操作 测试操作系统最简单的方法是什么 我知道我可以解析 version 命令的输出 有没有更简单的东西可以揭示操作系统 来自谷歌 您
  • 哪种 LaTeX 包与 knit 一起使用以获得更多的表格控制?禁忌?

    我正在用 knitr 写一张更长的桌子xtable和tabular environment longtable 在 longtable 包中时print将它们纳入我的 Rnw file 问题是我对longtable环境控制不够 我有一些文本
  • MVC 4 Razor 如果拆分 div 标签

    我有以下 MVC 4 Razor 代码 for int i 1 i lt 100 i if currentCol 1 Html Raw div class row Need to do this because can t have a o
  • Django 类视图未返回 HttpResponse 对象。它返回 None 相反

    urls py from housepost views import ListingPost url r house post ListingPost as view name post house views py from djang
  • LISP - 破坏性和非破坏性构造

    正确的定义是什么破坏性的 and 非破坏性的在 LISP 或一般情况下 中构造 我试图寻找真正的含义 但我只发现了这些术语的很多用法 而没有真正解释它们 据我了解 通过破坏性的函数是指一个函数 它改变构造 或变量 的含义 所以当我将一个列表
  • 如何使用 maven- assembly-plugin 版本 3 设置最终的 jar 名称

    在旧版本的插件中 您可以使用
  • 无法声明接口:资源繁忙

    我正在使用 USB4Java 低级版本 并且基本上是根据这段代码工作的here http www mets blog com java usb communication usb4java 我在 Ubuntu 中工作 遇到了有关权限的问题
  • 最大方法名称长度

    有谁知道您选择的编程语言中方法名称的最大长度是多少 我本来打算将此作为一个 C 特定问题 但我认为了解整个范围会很好 还涉及哪些因素 语言规范对此有限制吗 What does the compiler limit it to 32 位和 6
  • html 中的图像按钮

    我正在尝试获取一个带有图像的按钮 我见过类似下面的东西 但它们不会为您提供普通按钮所具有的按钮按下 释放效果
  • 使用 Jest 测试来自 React-router v4 的链接

    我在用着jest测试一个组件从反应路由器 v4 开始 我收到警告需要来自反应路由器的上下文
  • Angular2 中的 MVW 代表什么?

    我有很多介绍 MVC MVP MVVM 等的链接 但我没有得到一个可以说明 M 在 Angular2 中到底代表什么 V 在 Angular2 中到底代表什么以及 W 在 Angular2 中到底代表什么的信息 也许W有一个答案 那就是W代
  • 将表与同一个表的前一条记录连接起来

    我有一个包含历史记录的表 由主表中的多个触发器发布到那里 我想在历史表上创建一个 select 语句 其中每个记录都由其先前的记录 由相同的 LineID 和最高的 ActionDate 标识 连接 这样我就可以提取这两者之间的差异 我尝试
  • 我可以更改 LongListMultiSelector 中的复选框颜色吗? WP8

    我需要更改 Windows Phone 8 中 LongListMultiSelector 复选框的颜色 因为我的背景是白色 这可能吗 Thanks 为此 您必须首先通过在 Visual Studio 中的文档大纲中右键单击长列表选择器来编
  • 国家/地区的下拉菜单

    您好 我想为国家和州实现下拉菜单 州下拉列表应根据所选国家 地区更改其值 有没有任何插件或 gem 可以在 Rails 中执行此操作 尝试卡门插件 http autonomousmachine com posts 2009 4 1 carm
  • 从 C# 调用 C++ DLL

    我想使用 C 中的 C DLL C DLL 是win32 控制台应用程序 我已成功调用它 并希望在 C 中处理来自 C 的数据 然而 C 应用程序在执行 DLL 后退出 即这一行 GetArrayFromDLL 我是 C 和 Visual