我正在尝试在c ++ / CLI中编写一个dll包装器,以连接要在LabView中使用的本机c ++类中的函数。我已经成功地编写了一个包装程序来执行此操作,并且一切都按预期工作(见下文)。该问题在底部解释(在Labview图像之后)。
本地c ++头文件。
//native c++ header
#pragma once
namespace AddTwoNumbersLib
{
class AddClass
{
private:
double _x;
double _y;
bool _test;
public:
//Constructor
AddClass();
//Member functions
virtual bool toggle (bool test);
double Add(double x, double y);
static double subtract(double z, double a);
};
}
本地c ++ .cpp文件。
// native c++ .cpp
#include "stdafx.h"
#include "AddClass.h"
namespace AddTwoNumbersLib
{
//Constructor
AddClass::AddClass()
{}
//Member functions
double AddClass::Add(double x, double y)
{
_x = x;
_y = y;
return _x + _y;
}
double AddClass::subtract(double z, double a)
{
return z - a;
}
bool AddClass::toggle(bool test)
{
_test = test;
return _test;
}
}
包装c ++ / CLi头文件。
// ClrWrapper.h
#pragma once
using namespace System;
namespace ClrWrapper {
public ref class MathWrap
{
private:
AddTwoNumbersLib::AddClass *_MyManagedAdd;
AddTwoNumbersLib::AddClass *_push;
public:
//Constructs an instance of the class and an
//instance of the underliying native class AddClass
MathWrap();
~MathWrap();
double AddWrapper(double x, double y);
double subWrap(double z, double a);
bool toggleWrap(bool push);
};
}
包装c ++ / CLI .cpp文件
// This is the main DLL file.
#include "stdafx.h"
#include "ClrWrapper.h"
using namespace ClrWrapper;
MathWrap::MathWrap()
{
_MyManagedAdd = new AddTwoNumbersLib::AddClass();
_push = new AddTwoNumbersLib::AddClass();
}
MathWrap::~MathWrap()
{
delete _MyManagedAdd;
}
double MathWrap::AddWrapper(double x, double y)
{
return _MyManagedAdd->Add(x, y);
//return AddTwoNumbersLib::AddClass::Add(x, y);
}
double MathWrap::subWrap(double z, double a)
{
return AddTwoNumbersLib::AddClass::subtract(z, a);
}
bool MathWrap::toggleWrap(bool push)
{
return _push->toggle(push);
}
LabView结果:
问题
当我将头文件更改为纯虚拟文件时,我的代码不再起作用。这是因为我试图在包装器.cpp中实例化(从现在的抽象类)。在解决此问题方面,我将非常感谢您的帮助。
virtual bool toggle (bool test) = 0;
答案 0 :(得分:0)
AddClass
的指针可以是纯虚拟类/接口的指针,也可以包含纯虚拟函数。AddClass
)必须实现所有功能!AddClass
中的不同派生类。但是每个派生类都必须实现所有虚函数!这是否有C ++或C ++ / CLI都不重要。