And*_*ndy 7 c# c++-cli visual-c++
我有一些C++代码:
namespace Compute {
class __declspec(dllexport) IProgressCB {
public:
virtual void progress(int percentCompleted) = 0;
};
double __declspec(dllexport) compute(IProgressCB *progressCB, ...);
}
Run Code Online (Sandbox Code Playgroud)
从中创建了"compute.dll",在Visual Studio 2008中打开了"公共语言运行时支持(/ clr)".
我想从C#调用此代码.
接下来,我创建一个C#控制台应用程序并添加compute.dll作为参考.然后我尝试子类化/实现IProgressCB:
public class Progress : Compute.IProgressCB
{
public void progress(int percentCompleted)
{
Console.WriteLine(percentCompleted + "% completed.");
}
}
Run Code Online (Sandbox Code Playgroud)
然而,VS的自动完成找到了"Compute"命名空间,但没有查找其中的任何类或函数!?当我尝试编译; 它抱怨IProgressCB不公开.如果我在IProgressCB声明之前公开,它会抱怨无法从密封类型"Compute.IProgressCB"派生出来.
我在这做错了什么?我想采用现有的C++代码,不做任何修改,但用/ clrc编译它然后从C#中使用它.这不可能吗?
“不做任何修改”是可能的,但您需要一个中间 C++/CLI 层来包装现有代码。C# 和其他 CLR 语言只能“查看”托管类型,即引用类、值类等。仅通过将 /clr 应用于现有代码库,您将无法避免编写额外的 C++ 代码。
| 归档时间: |
|
| 查看次数: |
2026 次 |
| 最近记录: |