在 C++ 项目中使用 .NET Core 3.1 C# dll

问题描述

我是一家通才公司的软件开发人员。我们是一个小团队,我继承了一些已有 20 年历史的软件(我猜是在很多公司)

本软件采用 C/C++ 编码,使用 Visual Studio 2010。其目的是与 USB、以太网和蓝牙设备进行通信。在此之前,我们使用蓝牙加密狗与蓝牙设备进行通信。今天我必须通过蓝牙集成到 PC 中进行通信。为此,我使用了微软提出的例子,用 C# 编码:

https://github.com/microsoft/Windows-universal-samples/tree/master/Samples/BluetoothLE

为了亲自动手,我制作了一个小工具,可以让我与我们的设备进行通信。现在我想将通信部分作为DLL集成到我们的软件中。

所以我正在尝试使用 C/C++(使用 Visual Studio)编码的软件与 C# 中的 DLL 进行通信,使用 .NET Core 3.1 作为框架。

首先,我想从头开始,使用 C# .NET Core 3.1 DLL 中内置的函数在 C++ 中创建一个简单的控制台应用程序。这允许我验证 C++/C# 通信。然而,我已经讨论了一个星期,我开始失去希望......

以下是我找到的一些来源:

https://en.wikipedia.org/wiki/C%2B%2B/CLI https://www.codeproject.com/Questions/476583/callplusc-23plusdllplusorplusclasspluswithinplusc Using C# dll in C++ code https://docs.microsoft.com/fr-fr/dotnet/core/native-interop/expose-components-to-com

但我无法将所有这些付诸实践。

我做的最后一个测试如下:

C# .NET Core 3.1 中的 MyDll:

namespace MyDLL
{
    public class Class1
    {
        public static double add(double a,double b)
        {
            return a + b;
        }
    }
}

我的 C++ 项目:

#include "pch.h"
#include "stdafx.h"
using namespace System;
#using "MyDLL.dll"

int main(array<System::String ^> ^args)
{
    double x = MyDLL::Class1::add(40.1,1.9);
    return 0;
}

我的应用程序和我的 DLL 编译。应用程序很好地找到了 DLL,显然找到我的 DLL 的添加函数没有问题。但是,当我启动我的应用程序时,我在 mcrtexe.cpp,第 247 行中出现此错误

System.IO.FileNotFoundException: '无法加载文件或程序集' System.Runtime,版本 = 4.2.2.0,文化 = 中性,PublicKeyToken = b03f5f7f11d50a3a '或其依赖项之一。指定的文件可以 找不到。'

我准备以另一种方式进行测试。我想要的只是能够在 C# 中使用我的 DLL,使用 .NET Core 3.1 和我的 C++ 软件。如果您有任何建议,我会倾听。

最好的问候

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)