c++ 调用c#dll (2种方式,步骤与示例)

本文详细介绍了两种在C++中调用C#代码的方法:1)通过COM组件的方式,创建C#接口并实现,然后在C++中使用#import导入并调用;2)利用CLR支持,创建C#类库,设置公共语言运行时支持后,在C++中直接引用并调用。两种方法均成功实现了跨语言的函数调用。
该文章已生成可运行项目,

1.com组件的方式

---- 创建部分 ----

a)创建c#的类库工程,按照com组件编写规范编写。

Class1.cs文件内容如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;


namespace ClassLibrary1
{
    public interface IMyClass
    {
        void Initialize();
        void Dispose();
        int Add(int a,int b);
    }

    public class MyClass : IMyClass
    {
        public void Initialize()
        {

        }
        
        public void Dispose()
        {
            
        }

        public int Add(int a,int b)
        {
            return a+b;
        }
    }
}

b)工程属性->应用程序->程序集信息->程序集COM可见,工程属性->生成->为COM互操作注册。

c)设置需要的(如Debug,x64)配置,重新生成,会生成projname.tlb文件。

---- 调用部分 ----

a)使用vs创建普通的c++ win32控制台应用程序。

b)编写代码,main函数所在文件中编写示例如下。

#include "stdafx.h"
#include <iostream>
using namespace std;

#import "../ClassLibrary/bin/x64/Debug/ClassLibrary.tlb"

int _tmain(int argc,_TCHAR* argv[])
{
    CoInitialize(NULL); // 初始化com环境
    ClassLibrary::IMyClassPtr p(__uuidof(ClassLibrary::MyClass));
    cout << p->Add(3,4) << endl; 

    return 0;
}

c)配置好后(如Debug,x64),重新编译生成,会在./x64/Debug文件夹下发现classlibrary.tlh和classlibrary.tli文件,说明c#编写的ClassLibrary.dll组件导入成功。

d)运行代码,输出7,OK。

2.clr工程的方式

---- 创建部分 ----

a)创建c#的类库工程。

示例Class1.cs文件内容如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace ClassLibraryDll
{
    public class Class1
    {
        public int testDllMut(int a,int b)
        {
            return a * b;
        }
    }
}

b)设置需要的(如Debug,x64)配置,重新生成,会生成projname.dll文件。

---- 调用部分 ---- 

a)使用vs创建普通的c++ win32控制台应用程序,设置工程属性->常规->公共语言运行时支持->公共语言运行时支持(/clr),

b)编写代码,main函数所在文件中编写示例如下。

#include "stdafx.h"
#include <iostream>
using namespace std;

#using "../ClassLibraryDll/bin/x64/Debug/ClassLibraryDll.dll"

int _tmain(int argc, _TCHAR* argv[])
{
    ClassLibraryDll::Class1^ c1 = gcnew ClassLibraryDll::Class1();
    cout << c1->testDllMut(3,5) << endl;
    return 0;
}

c)运行代码,输出15,OK。

本文章已经生成可运行项目
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值