我有一个要求,要求使用C ++ dll中的导出函数。
导出的函数中需要发生很多东西,但我不想重写我编写的所有C#代码。
我想将C#代码粘贴到DLL中并完成。
注意:我不想调用C#DLL,我想把C#代码放到C ++ DLL中。
这是Exports.def文件:
LIBRARY InstallCheckWin32
EXPORTS
IsConnectionPointValid @1
fnTest @2
这是我的DLL的.h文件:
// 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#代码吗?
由于
答案 0 :(得分:2)
不,你不能在相同的源文件中混合C#和C / C ++,并期望编译器以某种方式为此生成代码。
通常,在同一文件中混合使用多种编码语言在某些语言中仅提供有限的支持。使用C / C ++,您有时可以混合汇编(如mov ax,cx
,而不是.Net汇编)。用于创建网站的语言/框架经常可以混合使用JavaScript(但实际上并不是同时运行)...
修复:在大多数情况下,语言具有相似的功能/库 - 因此将代码重写为其中一种语言通常更容易。您还可以在使用不同语言编写的库之间进行互操作 - 如何执行此操作取决于语言的组合。对于某些情况,您可以使用一种语言将源交叉编译为另一种语言,但通常仅限于具有相同/相似框架的语言(C ++ / C#通常不属于这样的存储区,但您仍然可以找到C#到C ++交叉编译器)