实验1(dll:c# 客户端 c++)
dll代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace ClassLibrary1
{
[Guid("A644A915-3833-4ACD-8205-7B6A40D14359")]
public interface Interface1
{
[DispId(1)]
int add(int a, int b);
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace ClassLibrary1
{
[Guid("D62E44F7-D3C8-498F-8566-7C427DF8AA7D")]
[ClassInterface(ClassInterfaceType.None)]
public class Class1 : Interface1
{
int mA = 0;
public int add(int a, int b)
{
mA = mA + a + b;
return mA;
}
}
}
运行结果
2.实验2
2.1代码
2.1.1 dll 代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace ClassLibrary1
{
[Guid("A644A915-3833-4ACD-8205-7B6A40D14359")]
public interface Interface1
{
[DispId(1)]
int add(int a, int b);
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ClassLibrary1
{
class Class2 : Singleton<Class2>, Interface1
{
int mA = 0;
public int add(int a, int b)
{
mA = mA + a + b;
return mA;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace ClassLibrary1
{
[Guid("D62E44F7-D3C8-498F-8566-7C427DF8AA7D")]
[ClassInterface(ClassInterfaceType.None)]
public class Class1 :Interface1
{
public int add(int a, int b)
{
return Class2.getMy().add(a, b);
}
}
}
2.1.2 客户端代码
// dll实验-两次调用的是同一个对象吗.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#import "../ClassLibrary1/bin/Debug/ClassLibrary1.tlb"
using namespace ClassLibrary1;
void test1();
void test2();
int main()
{
std::cout << "Hello World!\n";
test1();
test2();
}
void test1() {
CoInitialize(NULL);
ClassLibrary1::Interface1Ptr CalcPtr(__uuidof(Class1));//获取Calc所关联的GUID
int ret = CalcPtr->add(1,2);
CalcPtr->Release();
CoUninitialize();
std::cout<< ret << "\n";
}
void test2() {
CoInitialize(NULL);
ClassLibrary1::Interface1Ptr CalcPtr(__uuidof(Class1));//获取Calc所关联的GUID
int ret = CalcPtr->add(1, 2);
CalcPtr->Release();
CoUninitialize();
std::cout << ret << "\n";
}
2.2 运行结果