Labview Import
Hallo alle zusammen,
ich habe einen dummy c++ DLL projekt mit Visual studio erstellt um einfach einen Library Import in labview auszuprobieren.
das Erstellen von C++ DLL projekt lauft genau wie geschmiert. Daraus habe ich einen Wrapper geschrieben, die nicht anders macht als die dummy Klasse zu Wrappen:
Hier bei ist meine Versuch:
****das C++ Teil:
* header File:
class MyClass
{
public:
MyClass(double, double);
~MyClass();
double Add(double,double );
double Subst(double, double);
double Mult(double, double);
double Divid(double, double);
private:
double m_a, m_b;
};
*CppFile:
#include "stdafx.h"
#include "MyClass.h"
MyClass::MyClass(double a,double b)
{
this->m_a = a;
this->m_b = b;
}
MyClass::~MyClass(){ }
double MyClass::Add(double a, double b)
{
return (a + b);
}
double MyClass::Mult(double a, double b)
{
return (a * b);
}
double MyClass::Subst(double a, double b)
{
return (b - a);
}
double MyClass::Divid(double a, double b)
{
return (b / a);
}
**--> Das Wrapper sieht so aus
Header File:
#pragma once
#include "MyClass.h"
#define DLLIMPORT __declspec (dllexport)
#ifdef __cplusplus
extern "C" { /* using a C++ compiler */
#endif
typedef struct Wrapper
{
void *MYClass;
}Wrapper;
DLLIMPORT Wrapper createWrapper(double a, double b);
DLLIMPORT void destoryWrapper(Wrapper LV_ref);
DLLIMPORT double Add(Wrapper LV_ref, double a, double b);
DLLIMPORT double Subst(Wrapper LV_ref ,double a, double b);
DLLIMPORT double Mult(Wrapper LV_ref,double a, double b);
DLLIMPORT double Divid(Wrapper LV_ref, double a, double b);
#ifdef __cplusplus
}
#endif
*** Wrapper cpp File
#include "C_DllWrapper.h"
DLLIMPORT Wrapper createWrapper(double a, double b)
{
Wrapper wrapper = {static_cast<void*>(new MyClass(a,b)) };
return wrapper;
//new MyClass(a,b);
}
DLLIMPORT void destoryWrapper(Wrapper LV_ref)
{
MyClass *myClass = static_cast<MyClass*>(LV_ref.MYClass);
delete myClass;
}
DLLIMPORT double Add(Wrapper LV_ref, double a, double b)
{
MyClass *myClass = static_cast<MyClass*>(LV_ref.MYClass);
return myClass->Add(a, b);
}
DLLIMPORT double Mult(Wrapper LV_ref, double a, double b)
{
MyClass *myClass = static_cast<MyClass*>(LV_ref.MYClass);
return myClass->Mult(a, b);
}
DLLIMPORT double Subst(Wrapper LV_ref, double a, double b)
{
MyClass *myClass = static_cast<MyClass*>(LV_ref.MYClass);
return myClass->Subst(a, b);
}
DLLIMPORT double Divid(Wrapper LV_ref, double a, double b)
{
MyClass *myClass = static_cast<MyClass*>(LV_ref.MYClass);
return myClass->Divid(a, b);
}
--> so weit so gut .
Ich kann daraus das DLL File erzeugen.
Ich habe dann mit Labview einen DLL Import durchgeführt.
Ich bekomme auch keinen Fehlermeldung.
--> hier ist das Problem:
bei einen einfache Test der funktionen bekomme ich einen komischen Ergebnisse:
wie z.B bei einen einfache Addition von zwei werte von type double
add(1,2) ich bekomme als Ergebnis 2,28614E-253
bei Multiplikation von 1*2 oder 2*3 oder ... = 0 (Ergebnis ist immer einen 0).
die lösung ist bestimmt einfach aber ich weiss es nicht was und wo ich in Labview was einstellen muss .
Für jeden Vorschlag danke ich euch in voraus.
besten Grüsse
|