ActiveX-nicht genügend Speicher vorhanden um Operation auszuführen



  • bei mir tritt regelmäßig folgende Fehlermeldung auf: "nicht genügend Speicher vorhanden um Operation auszuführen".

    Ich benutze ein ActiveX-Control ( http://www.signalrecovery.com/srinstcomms.htm ) um Daten von einem LockIn-Verstärker abzufragen.
    Die obige Fehlermeldung tritt immer, wirklich immer auf, wenn ich genau 2 mal 297 Datensätze ( a 10 Daten) über das ActiveX-control abgefragt habe.

    Kann es sein, dass das ActiveX-Control nur einen begrenzten Speicher hat und dieser dann voll ist? Wenn ja, wie kann ich diesen Speicher aus meiner Anwendung löschen?

    hier mal mein code:

    void CMessPrgDlg::LIMessen(CString LIKanal, CString LIDateiRoh, CString LIDatei)
    {
    
    	COleSafeArray vResponseArray;
    	VARIANT vStatusByte;
    	VARIANT vResponse;
    	vResponseArray.vt=VT_VARIANT;
    
    	COleSafeArray vResponseArrayMag;
    	vResponseArrayMag.vt= VT_VARIANT;
    	COleVariant vResponseElementMag;
    	vResponseElementMag.vt = VT_BSTR;
    
    	//initialisiert die Variablen.. hoffe ich jedenfalls
    	VariantInit(&vStatusByte);
    	VariantInit(&vResponse);
    	VariantInit(&vResponseArray);
    	VariantInit(&vResponseArrayMag);
    
    	CString Magnitude="";
    	long n=0;
    	double SumMag=0;
    	double Mittelwert=0;
    	double SumVarianz=0, Varianz=0;
    	int pmt=0;
    	short a=0;
    
    	m_SRInstComms; //Variable des ActiveX-Controls
    	a=m_SRInstComms.WriteReadSRInstrument(0,LIKanal,  &vResponse, vResponseArray, &vStatusByte);
    	// startet die Kurvenaufnahme 
    
    	a=m_SRInstComms.WriteReadSRInstrument(0,"NC",  &vResponse, vResponseArray, &vStatusByte); //erstmal Buffer löschen
    	a=m_SRInstComms.WriteReadSRInstrument(0,"CBD 20",  &vResponse, vResponseArray, &vStatusByte); // CurveBuffer mit Magnitude
    	a=m_SRInstComms.WriteReadSRInstrument(0,"STR 10",  &vResponse, vResponseArray, &vStatusByte);
    	a=m_SRInstComms.WriteReadSRInstrument(0,"LEN 10",  &vResponse, vResponseArray, &vStatusByte);
    	Sleep(330); //nach dem Umschalten braucht LockIn einige Zeit bis stabil
    	a=m_SRInstComms.WriteReadSRInstrument(0,"TD",  &vResponse, vResponseArray, &vStatusByte);
    	Sleep(110); // STR=10ms -> 100ms Timer zählt in schritten von 55ms
    
    	// Stand der Datenaufnahme Abfragen. wenn 3. ausgegebene Zahl >=16, aupfpassen! OVERLOAD!!!
    	a=m_SRInstComms.WriteReadSRInstrument(0,"M",  &vResponse, vResponseArray, &vStatusByte);
    
    	a=m_SRInstComms.WriteReadSRInstrument(0,"DC. 2",  &vResponse, vResponseArrayMag, &vStatusByte); // schreibt Mag in Array
    
    	long lResponseArrayElements = vResponseArrayMag.GetOneDimSize(); // fragt länge des Arrays ab
    
    	// frägt Verstärkungspannung der PMT's ab
    	if(LIKanal=="VMODE1") pmt=1;
    	if(LIKanal=="VMODE2") pmt=2;
    
    	m_fPMT585=float(MKAnalogRead(1,10));
    	m_fPMT680=float(MKAnalogRead(2,10));
    
    	//liest das übertragene Array aus
    	for(n=0; n<lResponseArrayElements; n++)
    	{		
    
    		vResponseArrayMag.GetElement(&n,&vResponseElementMag);
    		Magnitude = vResponseElementMag.bstrVal;
    
    		SumMag=SumMag+atof(Magnitude); //berechnet den Mittelwert
    
    		ofstream OutFile(LIDateiRoh,ios::app);
    		if (!n)
    		{
    			switch(pmt)
    			{
    			case 1:
    				OutFile <<"Spannung PMT:"<<float(MKAnalogRead(1,10))<<endl<<"Nummer der Messung: "<<TimerCounter<<"\t"<<"Status der Datenaufnahme:"<<m_LIAnz<<"\t"<<"Anzahl der Elemente:"<<lResponseArrayElements<<"\n";
    				break;
    			case 2:
    				OutFile <<"Spannung PMT:"<<float(MKAnalogRead(2,10))<<endl<<"Nummer der Messung: "<<TimerCounter<<"\t"<<"Status der Datenaufnahme:"<<m_LIAnz<<"\t"<<"Anzahl der Elemente:"<<lResponseArrayElements<<"\n";
    				break;
    			}
    
    		}
    		OutFile <<n<<"\t"<<Magnitude<<"\t"<<endl;//Ausgabe in Datei
    		//OutFile <<n<<"\t"<<Magnitude<<"\t"<<Phase<<"\t"<<endl;//Ausgabe in Datei
    		//OutFile <<n<<"\t"<<XWert<<"\t"<<YWert<<"\t"<<Magnitude<<"\t"<<Phase<<"\t"<<endl;//Ausgabe in Datei
    		if(n==lResponseArrayElements-1) OutFile<<"End"<<endl; 
    	}
    
    	Mittelwert=SumMag/lResponseArrayElements;
    
    	//berechnet die Standardabweichung
    	for(n=0; n<lResponseArrayElements; n++)
    	{
    
    		vResponseArrayMag.GetElement(&n,&vResponseElementMag);
    		Magnitude = vResponseElementMag.bstrVal;
    		SumVarianz=SumVarianz+(Mittelwert-atof(Magnitude))*(Mittelwert-atof(Magnitude));
    	}
    
    	Varianz=sqrt(SumVarianz/(lResponseArrayElements-1));
    
    	ofstream File(LIDatei,ios::app);
    
    	if(TimerCounter==1)
    	{
    
    		File<<"Spannung PMT:"<<"\t"<<"Zeit:"<<"\t"<<"MessZeit:"<<"\t"<<"Magnitude:"<<"\t"<<"Stabw:"<<endl;
    
    	}
    	//holt sich Systemzeit
    	CTime curTime = CTime::GetCurrentTime();
    	m_sTime.Format("%d:%d:%d", curTime.GetHour(), curTime.GetMinute(), curTime.GetSecond());
    	//schreibt die Mittelwerte in eine Datei
    	File<<float(MKAnalogRead(pmt,10))<<"\t"<<m_sTime<<"\t"<<float(Messzeit)/60000<<"\t"<<Mittelwert<<"\t"<<Varianz<<endl;
    
    }
    

Anmelden zum Antworten