kann mir einer AfxGetApp erklären?



  • ich habe folgendes problem

    ich moechte von meinem dialogklasse auf eine header-klasse zugreifen
    dlgklasse = CMesswertDlg
    headerklasse = c++Conn.h (hat kein .cpp) oder ich moechte auf diese funktion zugreifen da ich die m_feld1a usw. brauche.

    void CUTFView::con()
    {
    #include "DEF_math.h"
    #include "DEF_CO.h"
    
    	complex8	z1,z2,z3,a2,b2,hilf,ax2,bx2,rs2x,scale,scale1;
    	float	l1,l2,l3,pi,pi2,epsr,tand,deltaf,tandm,epsm,
    		phialt1,phialt2,betal,epseff1,
    		deps1,epseff2,deps2,deps,
    		endl,absrs2,absdb,phirs2,phirs,phigr1,phigr2,xweff,
    		weffi,rstr,rsend,endl0,endl1,endlg,y1,y2,abs11,phi11,
    		epsm1,alpha1,alpha2,xy1,xy2,xyo,xyd1,xyd2,phio;
    	int 	i,ierr,nphi1,nphi2,kenn1,kmag,kang,fehler,fd,iphi,
    		ieps,io,zeichnen,lesen=1;
    	int 	ntest=0,ngamma=0;
    	static
    		char	h1S[60],h2S[60],h3S[60];
    	static
    		FILE	*fp;
    	double	error,epsreff0,fmax;
    	pi	= (float)Pi;
    	pi2 = (float)2.0 * pi;
    	strcpy( poS, "" );
    
    	Clear();
    	Dialog( "\n\n\t**************** Connect ***************\n" );
    NEUSTART: 
    	ntest=0;
    	incon(&W,&H,&epsr,&tand,&l1,&l2,&l3,lesen);
    	lesen=0;
    	fehler = open_binfile(&fd,CALOUT_FILENAME,ALT,FEHLERABBRUCH);
    	FLESEN(Co.np,short);
    	FLESEN(Co.fa,double);
    	FLESEN(Co.fe,double);
    	input(Co.np,A11_con,   fd);
    	input(Co.np,B11_con,   fd);
    	input(Co.np,Sa22_con,  fd);
    	input(Co.np,Sb22_con,  fd);
    	input(Co.np,S11ol2,    fd);
    	input(Co.np,S11ol3_con,fd);
    	input(Co.np,S22ol2,    fd);
    	input(Co.np,S22ol3_con,fd);
    	input(Co.np,S21l1_con, fd);
    
    	fehler = close_binfile(fd,CALOUT_FILENAME,FEHLERABBRUCH);
    	deltaf = (float)((Co.fe-Co.fa) / (Co.np-1));
    	tandm	= tand;
    	epsm	= Epsr1   = epsr;
    
    	for (i=1;i<=Co.np;++i)
    	{
    		F[i] = (float)(Co.fa + (double)(i-1) * deltaf);
    		Lam0[i] = (float)(C0 / F[i]);
    		beta0[i] = pi2 / Lam0[i];
    		baleit((double)F[i],(double)W,(double)H,(double)epsr,
    			&Weff[i],&Epsreff[i],&Zl[i]);
    		alpha((double)F[i],(double)W,(double)H,(double)Weff[i],
    			(double)Epsreff[i],(double)Zl[i],(double)tand,&alphai[i]);
    		lam[i] = (float)(Lam0[i] / sqrt(Epsreff[i]));
    		Beta[i] = pi2 / lam[i];
    		Alpham[i] = FLOATNULL;
    		gmma[i] = cs_cmplx((double)alphai[i],(double)Beta[i]);
    	}
    
    	ierr	= nphi1   = nphi2 = kenn1 = 0;
    	phialt1 = phialt2 = (float)90.0;
    	epsreff0 = 1.02 * Epsreff[1];
    	fmax = C0 /2. / (l2-l3) / sqrt(epsreff0);
    
    	if (fmax / F[Co.np] > 0.01) fmax = 0.01 * F[Co.np];
    	if (fmax / F[Co.np] > 0.05) fmax = 0.05 * F[Co.np];
    M100:
    	ierr=0;
    	for (i=1;i<=Co.np;++i)
    	{
    		betal = (float)(beta0[i] * sqrt(epsreff0) * (l2-l3));
    		scale = cs_exp( cs_cmplx(0.,-2.*betal) );
    		scale1 = cs_div(S11ol3_con[i],S11ol2[i]);
    		scale1 = cs_mul(scale1,scale);
    		scale1 = cs_log(scale1);
    		epseff1 = (float)pow(cs_imag(scale1)/(2.*beta0[i]*(l2-l3))+sqrt(epsreff0),2.);
    		alpha1 = (float)(cs_real(scale1)/(2.*(l2-l3)));
    		if (alpha1 < (float)0.00001) alpha1 = (float)0.00001;
    		scale1 = cs_div(S22ol3_con[i],S22ol2[i]);
    		scale1 = cs_mul(scale1,scale);
    		scale1 = cs_log(scale1);
    		epseff2 = (float)pow(cs_imag(scale1)/(2.*beta0[i]*(l2-l3))+sqrt(epsreff0),2.);
    		alpha2 = (float)(cs_real(scale1)/(2.*(l2-l3)));
    		if (alpha2<(float)0.00001) alpha2 = (float)0.00001;
    
    		Alpham[i] = (float)((alpha1+alpha2)/2.);
    		Epsffm[i] = (float)((epseff1+epseff2)/2.);
    		gmma[i]   = cs_cmplx(Alpham[i],beta0[i]*sqrt(Epsffm[i]));
    
    		if (ntest<6 && F[i]>(float)fmax)
    		{
    			ntest++;
    			if (fmax >= 0.4*F[Co.np]) ntest=6;
    			fmax += fmax;
    			epsreff0 = 1.03*Epsffm[i];
    			goto M100;
    		}
    		deps1 = (epseff1 - Epsreff[i]) / Epsreff[i];
    		deps2 = (epseff2-Epsreff[i])/Epsreff[i];
    		deps = (float)((deps1+deps2) / 2.0);
    		error = 0.05;
    		if (F[Co.np]<5.) error=.1;
    		if ((fabs((double)deps1)<error)&&(fabs((double)deps2)<error))
    			epsmi[i] = (float)((epseff1+epseff2)/2.0);
    		else
    		{
    			if ((fabs((double)deps1)< error)&&(fabs((double)deps2)>error))
    				epsmi[i] = epseff1;
    			else if ((fabs((double)deps1)>error)&&(fabs((double)deps2)<error))
    				epsmi[i] = epseff2;
    			else if ((fabs((double)deps1)>=error)&&(fabs((double)deps2)>=error))
    				epsmi[i] = (float)(epsreff0);
    			++ierr;
    		}
    	}
    	kmag = 0;
    	kang = 1;
    	fehler = open_binfile(&fd,"data/gamma.bin",NEU,FEHLERABBRUCH);
    	strcpy(Dut,"epsreff.alpha");
    	for(i=1;i<=Co.np;++i) 
    
    	outd(kmag,kang,Co.np,F,a11x,a22x,ax,ax,fd);
    	fehler = close_binfile(fd,"data/gamma",FEHLERABBRUCH);
    
    	float m_feld1a;
    	float m_feld1b;
    	float m_feld2a;
    	float m_feld2b;
    
    	for(i=0;i<Co.np;i++)
    	{
    		m_feld1a = feld1a[i];
    		m_feld1b = feld1b[i];
    		m_feld2a = feld2a[i];
    		m_feld2b = feld2b[i];
    	}
    


  • Wo ist deine Frage zu AfxGetApp? 😕



  • AfxGetApp sollte ja eine zeiger generieren aber wie muss ich es schreiben und wo muss es hin? damit ich auf die daten von c++Conn.h greifen kann



  • Ist c++Conn.h irgendwie ein Member von deiner Applikation? 😕

    Du bekommst da einen Zeiger auf die von CWinApp abgeleitete Klasse deines Programms zurück. Die heißt irgendwas mit C...App - mir ist noch schleierhaft, wie die mit dem Header zusammenhängt.



  • Nochmal eine Anmerkung in technischer Sache:
    Damit du die Code-Tags verwenden kannst, musst du das Häkchen unten bei
    "BBCode in diesem Beitrag deaktivieren" wegmachen.

    Ich habe das oben schon für dich gemacht.

    Da mir aber neulich schon ein Beitrag von dir aufgefallen ist, wo das nicht funktioniert hast, schau doch bitte mal in dein Profil, ob du es dort deaktiviert hast - dann wird das automatisch für alle neuen Beiträge so gesetzt.

    Es ist für uns besser lesbar mit den Tag und du hattest sie ja auch gesetzt. 🙂
    Also, sei bitte so nett und schalte es an.



  • AfxGetApp() gibt dir einen Zeiger auf deine theApp Objekt.

    void CMyDlg::OnButton1() {
      CWinApp * pApp = AfxGetApp();
      pApp->WriteProfileString("Test", "Wert", "12334");
    }
    
    void CMyDlg::OnButton1() {
      CMyWinApp * pApp = static_cast<CMyWinApp*>(AfxGetApp());
      pApp->SpezialAppFunc();
    }
    

    Ansonsten würde ich dir raten deinen Code etwas zu überarbeiten. Dein geposteter Code ist "grausam".


Anmelden zum Antworten