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

前端之家收集整理的这篇文章主要介绍了使用/ clr编译现有C代码,然后从C#调用它前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一些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中打开了“公共语言运行时支持(/ clr)”.

我想从C#调用代码.

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

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

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

我在这做错了什么?
我想采用现有的C代码,不做任何修改,但用/ clrc编译,然后从C#中使用它.这不可能吗?

解决方法

可以对其进行“不做修改”,但是您需要一个中间C/C++LI层来包装现有代码. C#和其他CLR语言只能“看到”托管类型,即ref类,值类等.只需将/ clr应用于现有的代码库,就无法编写任何额外的C代码.
原文链接:https://www.f2er.com/c/118253.html

猜你在找的C&C++相关文章