C++
#include "pch.h"
#include <iostream>
using namespace std;
struct Data
{
double data[1];
};
extern "C" __declspec(dllexport) void Add(double a, double b, Data * pData)
{
double c = a + b;
pData->data[0] = c;
}
C#
using System;
using System.Threading;
using System.Runtime.InteropServices;
namespace ConsoleApp
{
struct Data
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)]
public double[] data;
};
class test
{
[DllImport("Dlldemo.dll", EntryPoint = "Add", CallingConvention = CallingConvention.Cdecl)]
public extern static void Add(double a, double b, ref Data pData);
private static volatile object obj = new object();
static public void Addresult(double a, double b , ref Data sd)
{
lock (obj)
{
sd.data = new double[1];
Add(a, b, ref sd);
}
}
}
class Program
{
static void Main(string[] args)
{
Data sd = new Data();
Thread thread1 = new Thread(delegate() {
test.Addresult(1.2, 5.5, ref sd);
double ids = sd.data[0];
Console.WriteLine(ids);
});
Thread thread2 = new Thread(delegate() {
test.Addresult(2.2, 6.9, ref sd);
double ids = sd.data[0];
Console.WriteLine(ids);
});
thread1.Start();
thread2.Start();
Console.ReadKey();
}
}
}