【发布时间】:2015-03-11 08:56:26
【问题描述】:
我有一些 C++ 代码:
namespace Compute {
class __declspec(dllexport) IProgressCB {
public:
virtual void progress(int percentCompleted) = 0;
};
double __declspec(dllexport) compute(IProgressCB *progressCB, ...);
}
我在 Visual Studio 2008 中打开“公共语言运行时支持 (/clr)”的情况下创建“compute.dll”。
我想从 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# visual-c++ c++-cli