Möglichkeit gesucht,nach return an Returnstelle zurückzukehren



  • Hallo,

    ich suche eine Möglichkeit, wie ich an die Stelle des return wieder zurückkehren kann. Hat da jemand eine Idee?
    Ich will mal kurz sagen warum: Ich versuch gerade alles was mit einem OPC Server zu tun hat in eine Klasse zu kapseln. Nun hab ich eine Funktion, die ermittelt mir alle Server. Diese Server sollen in einem Listenfeld im Dialog angezeigt werden. Der Code für das ermitteln sieht so aus:

    String __fastcall TMOPCClient::GetServer()
    {
    HKEY hk = HKEY_CLASSES_ROOT;
    	TCHAR szKey[MAX_KEYLEN];
             String myszKey;
    	for(int nIndex = 0; ::RegEnumKey(hk, nIndex, szKey, MAX_KEYLEN) == ERROR_SUCCESS; nIndex++)
    	{
    		HKEY hProgID;
    		TCHAR szDummy[MAX_KEYLEN];
    		if(::RegOpenKey(hk, szKey, &hProgID) == ERROR_SUCCESS)
    		{
    			LONG lSize = MAX_KEYLEN;
    			if(::RegQueryValue(hProgID, "OPC", szDummy, &lSize) == ERROR_SUCCESS)
    			{
                                  myszKey = szKey; // und dann myszKey sofort an Dialogklasse übergeben, damit dort 
                                                   //das in Listbox eingetragen werden kann und hierher zurückkehren 
                                                  //und weiter nach OPC Servern suchen
    
                                  // return myszKey;
                            	}
    			::RegCloseKey(hProgID);
    		}
    	}
    }
    

    Ich hoffe ihr könnt mich verstehen. Bin für jeden Tip dankbar.



  • ela schrieb:

    myszKey = szKey; // und dann myszKey sofort an Dialogklasse übergeben, damit dort 
                     //das in Listbox eingetragen werden kann und hierher zurückkehren 
                     //und weiter nach OPC Servern suchen
    

    Koenntest du das nicht in eine Funktion packen, die du an dieser Stelle immer wieder aufrufst?
    MfG Aoeke



  • Das macht man üblicherweise durch einen Funktionsaufruf. Spendiere deiner Dialogklasse also eine Funktion, die den Key entgegennimmt und einträgt, und rufe sie an der markierten Stelle auf.



  • Ich kann mir vorstellen was du meinst, man bekommt hier sicher (evtl.) mehrere Server zurück, und damit wird ein Funktionsaufruf natürlich schwierig.
    Ich würde wohl eine Klassenmembervariable

    String Server[10];
    

    anlegen
    und dann die Funktion alles auf das Feld schreiben lassen. Dann kannst du in deinem Dialog schauen wieviele Server da drin stehen.

    MfG ToRsTeN



  • Ja das ginge schon, aber ich will die TMOPCClient Klasse so allgemeingültig wie möglich gestalten. Das heißt im nächsten Projekt gibt es vielleicht keinen Dialog und die Server müssen trotzdem ermittelt und an die aufrufende Klasse gelangen.



  • nochwas: Geht natürlci hauf mit Call-By-Reference, falls du keine Klassenvariable anlegen willst 😃


Log in to reply