在 C++ 中使用 C# DLL

本文关键字:DLL C++ | 更新日期: 2023-09-27 18:36:14

我正在尝试在c ++中使用c# dll。我开发了一个 c# dll。

我尝试将其添加为对c ++文件的引用,它显示警告为:

无法添加引用
- 面向更高版本的 .NET Framework
- 不是 .Net 程序集
- 不是已注册的 ActiveX 控件

所以我在我的 c++ 包装器文件中添加了如下所示的 dll。我可以访问 c# dll 中存在的类。

#using <C:'Users'New'Documents'Visual Studio 2015'Projects'ClassLibrary1'ClassLibrary1'bin'Debug'ClassLibrary1.dll>
using namespace csharp; //namespace in which managed class is present
#include "Header.h"
extern "C"
{
    __declspec(dllexport)  int func()
    {
        managedClass^ r = gcnew managedClass();
        someClass^s = gcnew someClass();
        s->name = "xyz";
        return r->getString(s);
    }
} 

然后我将包装器 dll 导入 c++ 控制台应用程序,如下所示

#include <iostream>
#include <Windows.h>
#pragma comment(lib,"C:''Users''New''Documents''Visual Studio 2015''Projects''C++Wrapper''Debug''C++Wrapper.lib")
#include <C:'Users'New'Documents'Visual Studio 2015'Projects'C++Wrapper'C++Wrapper'Header.h>
void main()
{
    int result = func();
    std::cout << result;
    getchar();
}

但是我收到如下错误:

在 0x7479D928 (KernelBase.dll) 处未处理的异常 C++客户端专业版.exe:0xE0434352(参数:0x80070002、0x00000000、 0x00000000,0x00000000,0x73790000)。

当我尝试使用加载库(libpath)函数加载dll时,我遇到了同样的错误。
当我搜索此错误时,我知道它无法找到该文件。哪一步我错了。在 c++ 中使用 c# dll 需要更正什么?
编辑
1)我已经编辑了我的c ++包装器文件。我想在 c# dll 中为类创建一个实例,并将其作为函数参数传递给同一个 dll。
这就是为什么我没有选择另一种方法,在这种方法中,我们只能使用公共接口导出函数,我们无法访问类。
2) 我在项目中启用了/clr。

在 C++ 中使用 C# DLL

1) 使用 CCW(com 可调用包装器)。若要使用"注册 COM 互操作"标记托管 (c#) 程序集,请执行以下步骤

第 1 步。在"解决方案资源管理器"中选择项目后,在"项目"菜单上单击"属性"。第 2 步。单击 Visual Basic 中的"编译"选项卡。单击 C# 中的"生成"选项卡。第 3 步。选中"注册 COM 互操作"复选框。

否则您可以访问

a) http://msdn.microsoft.com/en-us/library/ms404285.aspx

有关"如何从本机可视C++代码调用托管 DLL"的更多详细信息

例如看这里

http://www.codeproject.com/Articles/16206/Call-C-code-from-C-and-read-an-array-of-struct-whi

2) 使用反向 P/调用,如下所示

http://tigerang.blogspot.in/2008/09/reverse-pinvoke.html

使用反向 P/调用时,请注意参数的封送处理。