【问题标题】:C-callable wrapper around C++ class围绕 C++ 类的 C 可调用包装器
【发布时间】:2015-04-13 07:47:10
【问题描述】:

我正在按照教程创建一个围绕 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' 左侧必须有类/结构/联合

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

【问题讨论】:

  • 您是否添加了.dll 作为对您项目的引用?
  • @Tumelo:请至少尝试来减少您的问题。在此过程中,您要么自己孤立并解决它(很快就会变得更好更快),或者至少有机会提出一个好问题。我删除了大部分不相关的垃圾。顺便说一句:您应该考虑使用相对包含路径而不是绝对路径。
  • @Deduplicator 谢谢,我将使用相对路径。

标签: c++ wrapper extern-c


【解决方案1】:

你的意思是:

MyClass myClass(x, y);

而不是

MyClass myClass(int  x, int y);

您键入的是声明一个名为“myClass”的函数,该函数返回一个“MyClass”实例并接受两个整数。您的意思是通过传递 x 和 y 来实例化一个名为“myClass”、类型为“MyClass”的变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 2021-03-15
    • 2013-03-07
    相关资源
    最近更新 更多