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

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 
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 
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。

你可能感兴趣的:(C++,c#,c++,c#)