Heinz-Mario Frühbeis
unread,Jul 4, 2017, 8:30:03 AM7/4/17You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to
Am 03.07.2017 um 20:57 schrieb Heinz-Mario Frühbeis:
Es geht immer noch um das selbe Programm...
Es besteht ja aus (mittlerweile) drei shared libs und einigen bin's, die
diese nutzen. Eine lib ist IDA..., die hat z. Bsp. eine
Schnittstelle/Funktion, welche std::string als Parameter hat.
Das lief/läuft auch wunderbar, bis ich gestern eine Funktion bei IDA
hinzugefügt habe, auch mit std::string als Parameter (zwei Mal)...
In der bin, einem Programm, das das nutzt:
hSections.h:
std::string mIdentFrom, mIdent;
IDA *mIDA = NULL;
XIDA *mXIDA = NULL;
(In Reihenfolge des Zugriffs....)
main:
#include "hsection.h"
#include "secbase.cpp"
int main(int argc, char *argv[]){
if(argc < 3){return 1;}
mIdentFrom = argv[1];
mIdent = argv[2];
IDA nIDA(mIdentFrom, mIdent); // alles bestens
mXIDA_API = &nXIDA_API;
mIDA = &nIDA;
mXIDA = mIDA->_XIDA();
...
SecBase_Init();
}
secbase.cpp:
#include "hsection.h"
void SecBase_Init(){
...
mXIDA_API->SetTaskInfCallback(mIdentFrom, mIdent, &TaskInf); // kein
Problem mit den Ident-Strings
...
}
secbase_ev.cpp:
#include "hsection.h"
void btnIDA_Click(){
std::string nStr = mIDA->GetUserName(mIdentFrom, mIdent); // [1]
}
[1]
Das ist, was ich gestern neu hinzugefügt habe...
Aber ab da terminierte das Programm immer mit einem Fehler (von DBus)...
Darauf hin habe ich zuerst bei meinen DBus-Funktionen gesucht, aber
nichts falsches gefunden...
Dann habe ich mir de Ident-Strings angeschaut... Treffer, mIdentFrom war
korrumpiert! Anstatt z. Bsp. IDABrowse als Wert, gab es bei btnIDA_Click
dann irgendwelche kryptische Zeichen (Pik-As und so'n "Kram" WIMRE).
Aber *nur* bei mIdentFrom und *nur* in btnIDA_Click()! mIdent ging
tadellos...
Hier würde mich mal wirklich interessieren, wieso _eine_ String-Variable
korrumpiert werden kann...und nicht beide.
Da ich direkt keine Lösung fand für dieses Problem, habe ich in der lib
IDA die Schnittstelle (mal) geändert und von std::string als Parameter
nach const char* geändert...
Und wumms, alles bestens!
Wieso ist das so?
Ich meine, die libs liegen im selben Prozess-Raum...
Ist das irgendein undefiniertes C++-Verhalten für/mit std::string, oder
wie kann man sich das erklären?
Des weiteren:
Kann es sein, ich habe es jetzt (noch) nicht getestet, das das mit int
eventuell auch der Fall sein kann, und das man besser auf unsigned int
wechselt?
H-MF