ATL::Return Problem



  • moin meisters ...

    Ich habe ein COMObjekt mit dieser Methode erstellt:

    STDMETHODIMP CTAPI1::LineOpen(DWORD dwPrivileges, DWORD dwMediaModes)
    {
    	// ZU ERLEDIGEN: Implementierungscode hier hinzufügen
    	DWORD dwAPIVersion = (MAKELONG(4,1));
    	DWORD dwRetAPIVersion = 0;
    	LINEEXTENSIONID	ExtensionID;
    	LONG  lRet = 0;
    
    	lRet = lineNegotiateAPIVersion(m_hLineApp, m_dwDeviceID, dwAPIVersion, dwAPIVersion, &dwRetAPIVersion, &ExtensionID);
    	if( lRet == 0 )	
    	{
    		lRet = lineOpen(m_hLineApp, m_dwDeviceID, &m_hLine, dwRetAPIVersion, 0, (DWORD)this, dwPrivileges|LINECALLPRIVILEGE_MONITOR, dwMediaModes, NULL);
    		if( lRet == 0 )
    		{
    			MessageBox(NULL, "ok", "LineOpen", MB_OK);
    			return S_OK;
    		}
    	}
    	MessageBox(NULL, "Error", "LineOpen", MB_OK);
    	return 1;
    
    }
    

    In meinen Test wird ein Fehler verursacht, weil m_dwDevice nicht geöffnet werden kann ( Gerät ist nicht angeschlossen )

    Die Funktion lineNegotiateAPIVersion schlägt schon fehl was ok ist.

    Nur im FoxPro Programm wird beim Aufruf der Methode 0 (.NULL.) zurück gegeben,
    obwohl die MsgBox mit "Error" erscheint.

    Wenn ich E_FAIL zurückgebe, kommt zusätzlich noch ein "Unknown OLE Error".
    Ich möchte aber keinen OLE Error sondern einen definierten Rückgabewert meiner
    Methode erhalten !

    Ein anders Problem: wie erstelle ich eine Methode welche einen BSTR zurück gibt ?
    Ich kann zwar beim Erstellen den Rückgabewert BSTR festlegen, beim Kompilieren
    wird aber gemeldet, daß die Methode HRESULT nur zurückgeben kann.

    Da ich ein Newbie in Sachen ATL bin würde ich mich auch über nen Link freuen
    wo diese Problematik erklärt wird. Das Tut von MS habe ich gelesen und auch bei
    CodeGuru mich schlau gemacht, aber nix passendes gefunden.

    Besten Dank im Voraus
    mfg
    RB


Anmelden zum Antworten