Hallo,
ich versuche gerade meine ersten Schritte mit Cache5.0 und seiner C++ Schnittstelle.
Ich hab im Studio ne ganz einfache Klasse entworfen:
<PRE>
Class demo.Pet Extends %Persistent [ ClassType = persistent, ProcedureBlock ]
{
Property Name As %String;
}</PRE>
Danach hab ich die C++ Proxyklassen generiert und ein genauso einfaches C++ Programm geschrieben:
<PRE>
#include <iostream>
#include "demo_Pet.h"
typedef d_ref<demo_Pet> d_Pet;
int main()
{
Db_err conn_err;
d_connection conn;
d_Pet tier;
conn= tcp_conn::connect("localhost[1972]:PET","_system","sys",&conn_err);
if(conn_err)
{
std::cerr<<"Fehler :"<<conn_err<<'\n';
}
try
{
Database db(conn);
std::wstring id;
std::wcin>>id;
tier = demo_Pet:penid(&db,id.c_str());
std::cout<< tier->getName()<<'\n';
return 0;
}
catch(Db_err &err)
{
std::cerr<<err<<'\n';
return -1;
}
}
</PRE>
Die Datenbank hatte ich im Terminal mit einigen Testdaten gefüllt.
Also das Programm kompiliert anstandslos und die Abfrage funktioniert auch.Aber beim verlassen des try Blocks(wenn also der angebliche "Smartpointer" d_ref zum tragen kommt bekomme ich eine Access Violation. Ich hab im Debugger mal den Referenzzähler des Smartpointers manuell auf 2 gesetzt damit
d_ref nicht versucht das Objekt zu zerstören und hatte auch den Erfolg dass die Zugriffsverletzung ausblieb.
Besonders frustrierend an der ganzen Geschichte ist dass mein Miniprogramm eigentlich genau das Gleiche ist wie das PersonSample das der Datenbank beiliegt(ausser das dieses funktioniert).
Ich hoffe mir kann hier jemand weiterhelfen.
Was läuft mit der Zerstörung des(oder der) Objekte falsch? Wenn ich mehrere Objekte öffne oder auch neue erstelle bekomme ich für jedes einzelne eine Zugriffsverletzung.
MfG
ich versuche gerade meine ersten Schritte mit Cache5.0 und seiner C++ Schnittstelle.
Ich hab im Studio ne ganz einfache Klasse entworfen:
<PRE>
Class demo.Pet Extends %Persistent [ ClassType = persistent, ProcedureBlock ]
{
Property Name As %String;
}</PRE>
Danach hab ich die C++ Proxyklassen generiert und ein genauso einfaches C++ Programm geschrieben:
<PRE>
#include <iostream>
#include "demo_Pet.h"
typedef d_ref<demo_Pet> d_Pet;
int main()
{
Db_err conn_err;
d_connection conn;
d_Pet tier;
conn= tcp_conn::connect("localhost[1972]:PET","_system","sys",&conn_err);
if(conn_err)
{
std::cerr<<"Fehler :"<<conn_err<<'\n';
}
try
{
Database db(conn);
std::wstring id;
std::wcin>>id;
tier = demo_Pet:penid(&db,id.c_str());
std::cout<< tier->getName()<<'\n';
return 0;
}
catch(Db_err &err)
{
std::cerr<<err<<'\n';
return -1;
}
}
</PRE>
Die Datenbank hatte ich im Terminal mit einigen Testdaten gefüllt.
Also das Programm kompiliert anstandslos und die Abfrage funktioniert auch.Aber beim verlassen des try Blocks(wenn also der angebliche "Smartpointer" d_ref zum tragen kommt bekomme ich eine Access Violation. Ich hab im Debugger mal den Referenzzähler des Smartpointers manuell auf 2 gesetzt damit
d_ref nicht versucht das Objekt zu zerstören und hatte auch den Erfolg dass die Zugriffsverletzung ausblieb.
Besonders frustrierend an der ganzen Geschichte ist dass mein Miniprogramm eigentlich genau das Gleiche ist wie das PersonSample das der Datenbank beiliegt(ausser das dieses funktioniert).
Ich hoffe mir kann hier jemand weiterhelfen.
Was läuft mit der Zerstörung des(oder der) Objekte falsch? Wenn ich mehrere Objekte öffne oder auch neue erstelle bekomme ich für jedes einzelne eine Zugriffsverletzung.
MfG
Comment