我在代码(C#)中使用了非托管库(用C++编写)。该库提供的所有方法都是静态的。我使用P / Invoke与库进行通信。库的工作方式如下:
我通常想拥有该库的不同实例,一个实例的设置为,另一个实例的设置为B 。由于库是静态的,所以不能。
如何将此库包装在实例类中?大概,类的每个实例都需要在内存中加载该库的新实例(因为该库本身的每个实例都是静态的,并且在一个库实例中不能有两个不同的设置)。
除了重新编写库(因为我对它的编写方式没有任何控制权)以外,是否有其他解决方法?
我真的很希望能够处理对操作方法的并行调用。
最佳答案
这是问题注释中所描述内容的示例实现:
public class Library
{
private static class Native
{
[DllImport("foobar.dll")]
public static extern void Initialize();
[DllImport("foobar.dll")]
public static extern void Settings(int param1, string param2);
[DllImport("foobar.dll")]
public static extern float[] Intermediate(float[] input);
[DllImport("foobar.dll")]
public static extern void MainMethod(float[] main);
}
private static readonly object sync = new object();
private int param1;
private string param2;
static Library()
{
Native.Initialize();
}
public void Settings(int param1, string param2)
{
this.param1 = param1;
this.param2 = param2;
}
public float[] Intermediate(float[] input)
{
lock (sync)
{
Native.Settings(param1, param2);
return Native.Intermediate(input);
}
}
public void MainMethod(float[] input)
{
lock (sync)
{
Native.Settings(param1, param2);
Native.MainMethod(input);
}
}
}
最重要的事情