Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Named Pipes

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
15.12.2004, 16:37 Uhr
~Carla
Gast


Hi
Ich habe große Probleme mit Pipes. Habe ein paar Beispiele gefunden wo eine Verbindung zwischen einer Dialogfeldbasierten Anwendung und einer Konsolen - Anwendung hergestellt wird.
Ich benötige aber eine Verbindung zwischen 2 Dialogfeldbasierten Anwendung. Schön wäre bidirektional aber wenn das zu schwer ist tuts auch einfach. Hat da jemnd ein Beipsiel für mich oder ein einfaches Tutorial? Als ich versucht habe die Konsolenanwendung aus den Beispielen umzuschreiben so daß ich sie für meine Zwecke verwenden kann bin ich hoffnungslos untergegangen.
Brauche dringend eure Hilfe......

Carla
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.12.2004, 07:16 Uhr
~Carla
Gast


Kann mir da keiner weiterhelfen?

Gruß
Carla
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
17.12.2004, 09:45 Uhr
Spacelord
Hoffnungsloser Fall


Wie sieht denn dein Ansatz aus?
Es wird sich hier wohl keiner finden der dir aus Langeweile nen kommplettes Pipe Beispiel programmiert.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
20.12.2004, 11:34 Uhr
~Carla
Gast


Werd da mal was fertig machen. Geht mir eigentlich darum das um die Kernfunktionen CreateNamedPipe und CreateFile noch jede Menge anderer Funktionenen eingebunden sind wovon ich nicht weiß was sie für eine Funktion haben.
Ich poste die Tage mal meinen Ansatz .........

Gruß
Carla
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
20.12.2004, 13:18 Uhr
~Clara
Gast


So hier mal mein Code:

Sender:


C++:
bool CPipe::Connect()
{
    m_hPipe =      CreateFile(sPipeName, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    return m_hPipe != INVALID_HANDLE_VALUE;
}

bool CPipe::WritePipe(const char* pStr, ...) const
{
    if (m_hPipe == INVALID_HANDLE_VALUE)
        return false;

    char buffer[1024];

    va_list argList;
    va_start(argList, pStr);
    
    DWORD nCount = _vsnprintf(buffer, sizeof(buffer), pStr, argList);

    va_end(argList);

    if (nCount <= 0)
        return false;

    DWORD nWritten = 0;
    return WriteFile(m_hPipe, (BYTE*)buffer, nCount, &nWritten, NULL) != FALSE && nWritten == nCount;
}




Empfänger:


C++:
DWORD CPipeListener::ReadPipe()
{
    DWORD nReaded = 0;
    char buffer[300];
    int WERT;
    
    HANDLE hPipe = CreateNamedPipe(sPipeName, PIPE_ACCESS_INBOUND, PIPE_TYPE_BYTE | PIPE_WAIT, PIPE_UNLIMITED_INSTANCES, 0, 0, 200, NULL);
    if (!ConnectNamedPipe(hPipe, NULL))
        return FALSE;


    for (int k=0; k<300;k++)
        buffer[k] = ' ';
    
    WERT =     ReadFile(hPipe, buffer, sizeof(buffer)-1, &nReaded, NULL);
    ReadBuffer = buffer;
    ReadBuffer = ReadBuffer.Left(strlen(ReadBuffer)-10);
    ReadBuffer.TrimRight(" ");
    return 0 ;
}




Was muß ich noch zusätzlich beachten wenn Sender und Empfänger in einem Netzwerk liegen und nicht auf einem PC?
Ist das sehr umständlich zu realisieren?

Gruß
Clara
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
20.12.2004, 22:18 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


du musst denke ich beachten das der pipename den namen des rechners trägt über den er auch erreichbar ist. weiterhin müssen sie wahrscheinlich per rpc erreichbar sein
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
21.12.2004, 16:20 Uhr
~Clara
Gast


Hab da noch ein anderes problem. Wenn ich die Dateien in eine DLL einfügen will meckert der Compiler bei der Headerdatei des Emfängers rum:



C++:
#include <list>


class CPipeListener;


interface IPipeDataDest
{
    virtual void OnDisConnectingPipe(CPipeListener* pReader) = 0;

};


class CPipeListener
{
public:
    CPipeListener(IPipeDataDest* pDest)
    {
        m_nID = 0;
        m_hThread = NULL;
        m_pDest = pDest;
    }
    ~CPipeListener()
    {
        if (m_hThread)
        CloseHandle(m_hThread);
    }



    bool StartReader();

    static DWORD WINAPI ThredFkt(LPVOID lpParameter);
    DWORD ReadPipe();
    DWORD    m_nID;
    HANDLE    m_hThread;


    IPipeDataDest* m_pDest;
};



typedef BOOL (*TraceCallBackFkt)(const char* pStr, DWORD nSize);
typedef std::list<CPipeListener*> TPipeListenerList;


class CTraceCollector  : public IPipeDataDest
{
public:
    void CallReadPipe();
    CTraceCollector();
    virtual ~CTraceCollector();
    bool RunPipeReader();
protected:

    virtual void OnDisConnectingPipe(CPipeListener* pListener);
private:
    TPipeListenerList    m_PipeListenerList;
};

#endif



Und Zwar schreibt er folgendes:

C++:
: error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'IPipeDataDest'
: error C2501: 'interface' : Fehlende Speicherklasse oder Typbezeichner
: fatal error C1004: Unerwartetes Dateiende gefunden


Könnt ihr mir sagen warum er da meckert?
Da ich den Teil aud einem anderen Programm hab und ich das mit dem Interface nicht so ganz verstanden habe, bin ich da mit meinem Latein am Ende.

Gruß
Clara
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
21.12.2004, 18:28 Uhr
Spacelord
Hoffnungsloser Fall


Interfaces gibt es in C++ nicht. Die kannst du nur als abstrakte Basisklasse modellieren.
Dadurch das OnDisConnectingPipe rein virtuell ist handelt es sich schon um eine abstrakte Klasse.
Klassen die jetzt von IPipeDataDest abgeleitet werden müssen diese methode implementieren um konkrete Objekte erzeugen zu können.

Also ich hab mir nicht alles reingetan aber änder einfach mal interface in class um.
Die abgeleitete Klasse implementiert ja OnDisConnectingPipe und ist somit auch instanzierbar.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: