如何从c++项目调用用c#创建的dll文件
How to call dll file created with c# from c++ project?
我有一个用c#语言创建的dll文件。我想使用c#语言编写的函数在dll文件中,从一个c++项目。我知道这是可能使用c# dll与c#项目。但是不知道在c++项目中做c# dll的最好方法是什么。我用的是visual studio 2013。非常感谢您的指导。
我将总结通过COM向c++公开c#类的基本步骤。假设你有以下c#类:
public class Number
{
public Number()
{
}
public int Value
{
get;
set;
}
}
首先需要为要实现的类创建一个接口。只有通过该接口公开的方法和属性对COM(因此对c++)是可见的。通常,此接口具有与类相同的名称,但带有&;i &;前缀:
public interface INumber
{
int Value
{
get;
set;
}
}
接下来,你需要在接口和类中添加ComVisible和Guid属性。还建议在类中添加[ClassInterface(ClassInterfaceType.None)]:
[ComVisible(true)]
[Guid("71CACDF6-B6CD-4A46-B951-02E5C542852C")]
public interface INumber
{
...
[ComVisible(true)]
[Guid("B5809A32-A066-42E3-96D7-09FE622BC994")]
[ClassInterface(ClassInterfaceType.None)]
public class Number : INumber
{
...
(我通过使用Visual Studio自带的GUID实用程序获得GUID。你可以在C:Program Files (x86)Microsoft Visual Studio 12.0Common7Tools)
找到它。这就是c#方面的内容。在构建c# DLL之后,需要使用Regasm.exe命令行实用程序将其注册到COM。启动命令提示符并输入以下命令:
C:Program Files (x86)Microsoft Visual Studio 12.0Common7Toolsvsvars32"
Regasm ExampleDLL.dll/codebase/tlb
(如果VS安装路径不同,可能需要修改第一个)
现在你可以像这样从c++中使用DLL:
#include <iostream>
#import "ExampleDLL.tlb" // This is a file that should have been generated by Regasm.exe
using namespace std;
using namespace ExampleDLL;
int main()
{
CoInitialize(NULL);
INumberPtr pNumber;
pNumber.CreateInstace(__uuidof(Number));
pNumber->Value = 5;
cout << pNumber->Value;
return 0;
}
更多细节,请参见将。net Framework组件暴露给COM。
相关文章:
- 函数指针分配在创建 DLL 后导致错误
- 无法创建 DLL:获取 DLL "is not a valid Win32 application"
- 如何从支持linux/mac操作系统的第三方代码为我的c#项目创建dll
- 在 c++ 中创建 dll 并在 delphi 中调用的标准方法
- Windows错误:异常:使用从C++到Python的ctypes创建DLL时出现访问冲突或Windows错误193
- 如何从标头和库创建 DLL
- 如何在 c++ 生成器 6 中从应用程序源代码创建 dll
- 使用VCPKG下载依赖项而无需创建DLL
- 在运行时用c++创建dll
- 使用 C++ 创建 DLL 文件
- 使用不同的C++环境创建DLL
- 使用Cygwin创建DLL时
- 从 C# 调用C++代码而不创建 dll
- 创建DLL导出对象时发生堆栈溢出错误
- 在C++中创建DLL以在VS2005中导入C++DLL
- 正在用现有代码创建.dll
- r语言 - 在 Windows 上使用 Rcpp 创建.dll文件并编译C++代码
- 创建 Dll 文件
- Winbase.h 不支持创建 DLL 文件
- 从现有 mfc 项目创建 dll