如何从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#和C/c++,并期望编译器以某种方式生成相应的代码。
一般来说,在同一文件中混合多种编码语言仅在某些语言中得到有限的支持。使用C/c++有时可以混合汇编(如mov ax,cx
,而不是。net汇编)。语言/框架的网站创建,你经常可以混合在JavaScript(但实际上不是在同一时间运行)…
修正:在大多数情况下,语言具有可比较的功能/库-因此通常更容易将代码重写为其中一种语言。您还可以在用不同语言编写的库之间进行互操作——如何做到这一点取决于语言的组合。在某些情况下,您可以将一种语言的源代码交叉编译为另一种语言,但通常仅限于具有相同/类似框架的语言(c++/c#通常不属于这种范围,但您仍然可以发现c#到c++的交叉编译器)