围绕C ++类的C可调用包装器

时间:2015-02-12 14:17:38

标签: c++ wrapper extern-c

我正在按照教程创建一个围绕C ++代码的包装器,以便可以从C#中调用它 我编译包装器时遇到错误。 Header.h

class MyClass{
    public:
        MyClass(int x, int y);
        double GetSum();
    private:
        int x_;
        int y_;
};

以下是源文件(body.cpp)

#include  "Header.h"

MyClass::MyClass(int x, int y)
{
    x = 8;
    y = 8;
}

double MyClass::GetSum()
{
    int r = x_ + y_;
    return r;
}

包装类/ dll如下所示

#include "C:\Users\tumelo\Documents\Visual Studio 2012\Projects\Emgu\MyClassCpp\MyClassCpp\Header.h"
#include "C:\Users\tumelo\Documents\Visual Studio 2012\Projects\Emgu\MyClassCpp\MyClassCpp\Body.cpp"

//for the function you want made avaible from the dll
    extern "C" __declspec(dllexport) double GetResults(int x, int y)
    {
        //create an instance of the class 
        MyClass myClass(int  x, int y);
        return myClass.GetSum(); 
    }

我在return语句中得到了一个包装类。由于某种原因,似乎没有认识到类方法。错误如下:

  

错误C2228:'。GetSum'的左边必须有class / struct / union

让我感到困惑的是,这是从教程中复制和粘贴但我的不起作用。我能错过什么?

1 个答案:

答案 0 :(得分:5)

你的意思是:

MyClass myClass(x, y);

而不是

MyClass myClass(int  x, int y);

你输入的内容是声明一个名为" myClass"的函数。返回" MyClass"实例并采用两个整数。你的意思是实例化一个名为" myClass"的变量。类型" MyClass"通过传递它x和y。