Extern C

16/07/2013 - 12:16 von Heinz-Mario Frühbeis | Report spam
Hallo,

wie kann man denn in einer dyn. Bibliothek, die zur Laufzeit (per
dlopen) geöffnet wurde, im 'extern C'-Teil den Wert einer Variable
"festhalten"?

Zur Zeit versuche ich es so:

#ifndef IDAMEMBER_H
#define IDAMEMBER_H

#include <iostream>
#include <string>

class IDAMember{
friend class cIDA;
private:
long mIdent;
public:
void SetIdent(long vVal){
this->mIdent = vVal;
}
long GetIdent(){
return this->mIdent;
}
IDAMember();
~IDAMember();
};

#ifdef __cplusplus
extern "C"
{
#endif

IDAMember* cMember;

void InitMember(){
cMember = new IDAMember;
}

void RemoveMember(){
delete cMember;
}

int Set_Width(int vVal){ // z. Bsp. ist vVal = 100
cMember->SetIdent(vVal);
return cMember->GetIdent();
}

int Get_Width(){
return cMember->GetIdent();
}

#ifdef __cplusplus
}
#endif

#endif // IDAMEMBER_H

Set_Width gibt zwar 100 zurück, aber Get_Width gibt 1 zurück...

Ich brauche/möchte eine (quasi) Eigenschaften-Seite haben für meine
IDASection. Das muss/sollte aber variabel sein, also von einem Benutzer
frei definierbar. (Benutzer erstellt eine Bibliothek wo z. Bsp. in der
h-Datei Eigenschaften drin stehen (z. Bsp. Width, Height, etc.).
Und deswegen kann man das nicht "hart" linken und funktioniert wohl nur
per dlopen (AFAIK).
Aber irgendwie muss ich es jetzt noch hinkriegen, daß die Funktionen im
"extern C"-Teil einen Wert festhalten können.
Wie kriegt man das hin?

Heinz-Mario Frühbeis
 

Lesen sie die antworten

#1 Heinz-Mario Frühbeis
16/07/2013 - 12:38 | Warnen spam
Ich habe jetzt mal im "extern C"-Teil

static int nWidth;

int GetSet_Width(int vGet, int vVal){
if(vGet <= 0){
nWidth = vVal;
}
if(vGet > 0){
return nWidth;
}
return nWidth;
}

eingefügt und damit geht es dann, aber das erscheint mir nicht so
elegant. Geht es vllt eleganter?

Heinz-Mario Frühbeis

Ähnliche fragen