C# 如何使用C+中的C代码+;动态链接库

C# 如何使用C+中的C代码+;动态链接库,c#,c++,dll,C#,C++,Dll,我有一个命令,它要求从C++ DLL中使用导出函数。< /P> 在导出的函数中需要做很多事情,但我不想重写我为此编写的所有C#代码 我只想将C代码粘贴到DLL中,然后就可以完成了 注:我不想调用C*yDLL,我想把C++代码放入C++ DLL中。< /P> 以下是Exports.def文件: LIBRARY InstallCheckWin32 EXPORTS IsConnectionPointValid @1 fnTest @2 以下是DLL的.h文件: // The fol

我有一个命令,它要求从C++ DLL中使用导出函数。< /P> 在导出的函数中需要做很多事情,但我不想重写我为此编写的所有C#代码

我只想将C代码粘贴到DLL中,然后就可以完成了

<强>注:我不想调用C*yDLL,我想把C++代码放入C++ DLL中。< /P> 以下是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;
}
//InstallCheckWin32.cpp:定义DLL应用程序的导出函数。
//
#包括“stdafx.h”
#包括“InstallCheckWin32.h”
#包括
INSTALLCHECKWIN32_API void CallCSharp()
{
//这就是我想使用C#对象的地方
//例如:
DateTime now=DateTime.now;
}
我已将常规配置属性“公共语言运行时支持”设置为公共语言运行时支持(/clr)

在C++的DLL中,我还需要设置什么别的代码?

谢谢

不,您不能在同一个源文件中混合使用C#和C/C++,而期望编译器以某种方式为此生成代码

通常,在同一文件中混合使用多种编码语言在某些语言中的支持有限。使用C/C++有时可以混合使用汇编(如在
mov-ax、cx
,而不是.Net汇编中)。用于站点创建的语言/框架您可以经常在JavaScript中混合使用(但实际上不能同时运行)


修复方法:在大多数情况下,语言都有类似的功能/库,因此将代码重写为其中一种语言通常更容易。您还可以在用不同语言编写的库之间进行互操作—如何做到这一点取决于语言的组合。对于某些情况,可以将一种语言的源代码编译为另一种语言,但一般只限于具有相同/相似框架的语言(C++ + C语言一般不落入这种桶中,但您仍然可以找到C到C++交叉编译器)

您是否已经查看了一个基本的C++ CLI教程?我打赌他们甚至会有一个
日期时间。现在是
示例。这个DLL必须是一个带有导出函数的标准Win32 DLL。是不是我可能要问的问题?C不是C++,我不相信你能把C代码粘贴到CPP文件中,并编译它。C++编译器不知道如何处理它。我同意Scott Chamberlain的观点,这取决于它有多复杂以及你的C#的具体功能,也许可以在C++/CLI中重写它,而不会有太多变化。奇怪的是,我发现这篇文章,所以如果你把你的C#放入一个库中,也许它是可以做到的。我已经创建了一个C++/CLI项目,它将执行我需要执行的操作。。。谢谢你的见解。。。