首页 > 编程语言 >C++ 调用 C# - DllExport 方案

C++ 调用 C# - DllExport 方案

时间:2024-09-07 17:04:42浏览次数:10  
标签:调用 C# C++ Step NET 3F DllExport

3F/DllExport: .NET DllExport with .NET Core support (aka 3F/DllExport aka DllExport.bat)

目前还不支持 .NET6 以及后续的版本,看起来作者生活上遇到了一些麻烦,暂时也不打算处理了

无法使用 .NET 6 工作 · 问题 #197 · 3F/DllExport --- Unable to get working using .NET 6 · Issue #197 · 3F/DllExport

.NET 6 支持 · 问题 #219 · 3F/DllExport --- .NET 6 support · Issue #219 · 3F/DllExport

使用方法

Step 1 下载

下载 DllExport.bat ,放到 sln 解决方案文件夹

Step 2 C# 端配置

运行 bat,选中需要导出的项目,勾选 Installed,对于 Core 项目,勾选右下角的几个选线。

Step 3 C# 端导出

使用 DllExport 标记需要导出的函数

复杂数据的处理,需要使用结构体进行包装

[StructLayout(LayoutKind.Sequential)]
public struct Person
{
    [MarshalAs(UnmanagedType.LPStr)]
    public string Id;

    [MarshalAs(UnmanagedType.LPStr)]
    public string Name;

    public int Age;
}

cpp 端需要有对应的定义

struct Person
{
    const std::string Id;
    const std::string Name;
    int Age;
};

Step 4 C++ 使用

使用 LoadLibrary 的方式进行加载和调用,参考:C++ 调用 C# - AOT 方案

补充

因为不支持 .NET 6 以及后续版本,这里没有完全调通。

在 C# 中,无法调用框架中的函数,如 Console.WriteLine,调用就会出现如下错误

0x00007FFDDED8FABC (KernelBase.dll) (VisitorDemo.exe 中)处有未经处理的异常: 0xE0434352 (参数: 0xFFFFFFFF80070002, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00007FFDCB6A0000)。

无法加载框架文件,在 github issue 中所有 0xE0434352 可以了解更多内容,但是在 .NET6 下还是无法处理的。

因为没有最终走通,所以,以上代码仅供参考,可以在 GitHub - 3F/Examples: An complete examples and related support for various popular projects, and more. 找到作者提供的 Example.

标签:调用,C#,C++,Step,NET,3F,DllExport
From: https://www.cnblogs.com/jasongrass/p/18401901

相关文章

  • C++ 调用 C# - C++/CLI 方案
    C++/CLI方案是通过托管C++做中间层,来转发C#和C++之间的调用和数据传递。这个写法,C#不用做任何特殊的处理,正常写就可以。C++/CLI层新建一个C++/CLI项目,e.g.MedicalDbAccessWrapper,添加对C#项目的引用,注意,输出目录最好就是原生C++项目的输出目录,原生C++项目......
  • SpringBoot集成WebSocket实现后端向前端推送数据
    SpringBoot集成WebSocket实现后端向前端推送数据这里最好了解一定websocket参考地址:https://developer.mozilla.org/zh-CN/docs/Web/API/WebSockets_API/Writing_WebSocket_client_applications在此之前可以了解一下【轮询(Polling)、长轮询(LongPolling)、服务器发送事件(Server......
  • Docker 教程简介
    教程名:Docker与微服务实战B站地址:尚硅谷Docker实战教程(docker教程天花板)-哔哩哔哩讲师:周阳‍前提了解SpringBoot,SpringCloud了解一些中间件:Redis,Nginx,MySQL了解Linux的基本使用知道Git‍课程大纲基础篇(零基小白)Docker简介Docker安装Docker常用命令Do......
  • Docker 配置国内镜像源
    由于GFW的原因,在下载镜像的时候,经常会出现下载失败的情况,此时就可以使用国内的镜像源。什么是镜像源:简单来说就是某个组织(学校、公司、甚至是个人)先通过某种手段将国外的镜像下载下来,然后上传到国内的网站,这样我们在国内就可以通过这个网站下载到镜像源‍起因笔者有......
  • SciTech-Science: 纯色滤(分)光塑料片: 将光分解为BGR三原纯色(彩色CCD传感器原理) +
    彩色滤(分)光塑料片:将光分解为BGR三原纯色彩色CCD传感器原理透过一张彩色滤(分)光塑料片可以分解出光源的“与滤光片同颜色”的成份;例如“B(蓝色)滤光塑料片”:用"P紫"光源照射,其“蓝色成份”就会穿透过"蓝色滤光塑料片";用"G绿"或"R红"光源照射,则没有光线透过.......
  • Oracle数据库配置大页脚本
    编辑脚本su-oracle$vihugepages_settings.sh------------------------------------------#!/bin/bash##hugepages_settings.sh##Linuxbashscripttocomputevaluesforthe#recommendedHugePages/HugeTLBconfiguration#onOracleLinux##Note:Thisscri......
  • Mac 套壳截图软件有哪些?
    争取用一篇文章让你实现截图加壳自由,告别对套壳截图软件的依赖。点击查看未压缩透明背景超高清原图根据以往我所寻找的,Mac套壳截图软件里面并不完善,有些不尽人意,比如缺乏某种型号或设备的外壳,或分辨率不够,或没有透明背景。于是我恢复了以前Mac套壳截图的老方法,......
  • 鹏哥课程三子棋 全码C语言
    代码来自在b站上的鹏哥的课程,大部分为手打,少部分直接搬运了csdn博客其他学习者的代码。该三子棋代码内容全免费。这篇文章仅提供给认真上课的学习者参考使用,经过测试该代码能够正常运行使用。前言唯一美中不足的是,在开始游戏界面如果输入下棋坐标,会导致死循环。共包含三篇,......
  • GenRec论文阅读笔记
    GenRec:LargeLanguageModelforGenerativeRecommendation论文阅读笔记Abstract​ 本文提出了一种使用大型语言模型(LLM)的创新推荐系统方法,该方法纯粹基于原始文本数据,即使用项目名称或标题作为项目ID,而不是创建精心设计的用户或项目ID。更具体地说,我们提出了一种新颖的用......
  • Go - Web Application 10
    CreatingaunittestInGo,it’sstandardpracticetowriteyourtestsin*_test.gofileswhichlivedirectly alongsidethecodethatyou’retesting.So,inthiscase,thefirstthingthatwe’regoingtodo iscreateanewcmd/web/template_test.gofilet......