gpt4 book ai didi

C# 导入 C++ 非托管 dll 并从一个 dll 创建多个实例?

转载 作者:太空宇宙 更新时间:2023-11-04 11:56:17 25 4
gpt4 key购买 nike

我有一个用 C++ 编写的非托管 dll,它具有一个简单的功能。

int temp =0;
int func1(void)
{
return temp +=2;
}

导出的函数是

UNMANAGED_DLL1_API int recepret(void)
{
return func1();
}

然后我有一个导入此 dll 的 C# 项目。我想要做的是创建一个导入 dll 的类并从另一个类创建实例。

class DllClass
{
public int classval;

[DllImport("unmanaged_dll1.dll", EntryPoint = "recepret", CharSet = CharSet.Unicode)]
public static extern int recepret();

public int func1()
{
return recepret();
}
}

在表格申请中

public partial class Form1 : Form
{
DllClass dll1 = new DllClass();
DllClass dll2 = new DllClass();
DllClass dll3 = new DllClass();
private void button1_Click(object sender, EventArgs e)
{
richTextBox1.AppendText( "dll1 " + dll1.func1().ToString()+ "\r\n");
}

private void button2_Click(object sender, EventArgs e)
{
richTextBox1.AppendText("dll2 " + dll2.func1().ToString() + "\r\n");
}

private void button3_Click(object sender, EventArgs e)
{
richTextBox1.AppendText("dll3 " + dll3.func1().ToString() + "\r\n");
}
}

但是所有的树实例都是一样的。我想要独立实例。这可能吗?

最佳答案

你有一个全局变量。每个模块实例只有一个实例。每个进程都有一个 native DLL 模块实例。使用全局变量不是这里的解决方案。

如果您希望每个按钮点击都有一个不同的变量,您需要为每个按钮创建一个单独的变量。

C# 代码拥有变量会更有意义。

您的 C++ 代码如下所示:

void func1(int &value)
{
value +=2;
}

然后在 C# 中你可以这样调用它:

[DllImport("unmanaged_dll1.dll")]
public static extern void func1(ref int value);

....

int button1counter = 0;

private void button1_Click(object sender, EventArgs e)
{
dll1.func1(ref button1counter);
richTextBox1.AppendText( "dll1 " + button1counter.ToString()+ "\r\n");
}

关于C# 导入 C++ 非托管 dll 并从一个 dll 创建多个实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16002752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com