gpt4 book ai didi

c# - 使用/clr 编译现有的 C++ 代码,然后从 C# 调用它

转载 作者:太空狗 更新时间:2023-10-29 20:21:55 26 4
gpt4 key购买 nike

我有一些 C++ 代码:

namespace Compute {
class __declspec(dllexport) IProgressCB {
public:
virtual void progress(int percentCompleted) = 0;
};

double __declspec(dllexport) compute(IProgressCB *progressCB, ...);
}

我从中创建了“compute.dll”,并在 Visual Studio 2008 中启用了“公共(public)语言运行时支持 (/clr)”。

我想从 C# 调用此代码。

接下来我创建一个 C# 控制台应用程序并添加 compute.dll 作为引用。然后我尝试子类化/实现 IProgressCB:

public class Progress : Compute.IProgressCB
{
public void progress(int percentCompleted)
{
Console.WriteLine(percentCompleted + "% completed.");
}
}

然而,VS 的自动完成功能找到了“Compute”命名空间,但没有找到其中的任何类或函数!?当我尝试编译时;它提示 IProgressCB 没有公开。如果我在 IProgressCB 声明之前写 public,它会提示无法从密封类型“Compute.IProgressCB”派生。

我在这里做错了什么?我想采用现有的 C++ 代码,不对其进行任何修改,而是使用/clrc 对其进行编译,然后从 C# 中使用它。这不可能吗?

最佳答案

“不做任何修改”是可能的,但您需要一个中间 C++/CLI 层来包装现有代码。 C# 和其他 CLR 语言只能“查看”托管类型,即 ref 类、值类等。仅通过将/clr 应用于现有代码库,您将无法摆脱不编写额外 C++ 代码的情况。

关于c# - 使用/clr 编译现有的 C++ 代码,然后从 C# 调用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6467736/

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