如何从c++ DLL中使用c#代码?

本文关键字:代码 c++ DLL | 更新日期: 2023-09-27 18:06:21

我有一个要求,要求使用从c++ dll导出的函数。

在导出函数中有很多东西需要发生,但我不想重写我写的所有c#代码来完成它。

我只想把c#代码粘贴到DLL中,然后完成。

注意:我不想调用c# DLL,我想把c#代码放到c++ DLL中。

下面是Exports.def文件:
LIBRARY InstallCheckWin32
EXPORTS
    IsConnectionPointValid @1
    fnTest @2

这是我的。h文件的DLL:

// The following ifdef block is the standard way of creating macros which make exporting 
// from a DLL simpler. All files within this DLL are compiled with the INSTALLCHECKWIN32_EXPORTS
// symbol defined on the command line. This symbol should not be defined on any project
// that uses this DLL. This way any other project whose source files include this file see 
// INSTALLCHECKWIN32_API functions as being imported from a DLL, whereas this DLL sees symbols
// defined with this macro as being exported.
#ifdef INSTALLCHECKWIN32_EXPORTS
#define INSTALLCHECKWIN32_API __declspec(dllexport)
#else
#define INSTALLCHECKWIN32_API __declspec(dllimport)
#endif

INSTALLCHECKWIN32_API void CallCSharp();

.cpp文件如下:

// InstallCheckWin32.cpp : Defines the exported functions for the DLL application.
//
#include "stdafx.h"
#include "InstallCheckWin32.h"
#include <tchar.h>

INSTALLCHECKWIN32_API void CallCSharp()
{
    // this is where I want to use C# objects
    // eg:
    DateTime now = DateTime.Now;
}

我已经将通用配置属性"公共语言运行时支持"设置为公共语言运行时支持(/clr)

我还需要设置什么才能在c++ dll中使用c#代码?

谢谢

如何从c++ DLL中使用c#代码?

不,你不能在同一个源文件中混合使用c#和C/c++,并期望编译器以某种方式生成相应的代码。

一般来说,在同一文件中混合多种编码语言仅在某些语言中得到有限的支持。使用C/c++有时可以混合汇编(如mov ax,cx,而不是。net汇编)。语言/框架的网站创建,你经常可以混合在JavaScript(但实际上不是在同一时间运行)…

修正:在大多数情况下,语言具有可比较的功能/库-因此通常更容易将代码重写为其中一种语言。您还可以在用不同语言编写的库之间进行互操作——如何做到这一点取决于语言的组合。在某些情况下,您可以将一种语言的源代码交叉编译为另一种语言,但通常仅限于具有相同/类似框架的语言(c++/c#通常不属于这种范围,但您仍然可以发现c#到c++的交叉编译器)