C-вызываемая оболочка вокруг класса C++

Я следую руководству по созданию оболочки вокруг кода C++, чтобы его можно было вызывать из C#.
Однако при компиляции оболочки возникает ошибка. Заголовок.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' должен быть класс/структура/объединение

Что меня озадачивает, так это то, что это копирование и вставка из учебника, но мой не работает. Что я мог упустить?


person Tumelo    schedule 12.02.2015    source источник
comment
Вы добавили .dll в качестве ссылки на свой проект?   -  person Greg    schedule 12.02.2015
comment
@Tumelo: Пожалуйста, хотя бы попробуйте уменьшить вашу проблему. В ходе этого вы либо изолируете и решаете его самостоятельно (и очень скоро станете лучше и быстрее), либо, по крайней мере, получите шанс на хороший вопрос. Я удалил большую часть ненужного хлама. Кстати: вам следует подумать об использовании относительных путей включения вместо абсолютных.   -  person Deduplicator    schedule 12.02.2015
comment
@Deduplicator спасибо, я буду использовать относительные пути.   -  person Tumelo    schedule 13.02.2015


Ответы (1)


Вы имели в виду:

MyClass myClass(x, y);

вместо

MyClass myClass(int  x, int y);

Вы ввели объявление функции с именем «myClass», которая возвращает экземпляр «MyClass» и принимает два целых числа. Вы хотели создать экземпляр переменной с именем «myClass» типа «MyClass», передав ей x и y.

person Moby Disk    schedule 12.02.2015