Zum Inhalt springen

X_22

Mitglieder
  • Gesamte Inhalte

    22
  • Benutzer seit

  • Letzter Besuch

    Nie

Beiträge von X_22

  1. Jetzt bin ich verwirt

    Wiso hat der einen Editor?? Als ich damit geprobt habe hab ich immer Wodpad geöfnet als TXT gespeichert und dan über parameter gelinkt. Wie soll ich denn den Editor starten???

    Die scheiße mit dem zugreifen hatte ich auch, ich hab dann die include Dateien in das verzeichenis kopiert dann ging es glaube ich. Ich denke du must das irgentwo ändern, aber nur wo? =)

  2. Hahaha

    Den Borland C++ 5.5 Compiler hab ich mir auch runtergeladen weil ich dachte umsonst und von einer guten Firma, abe er ist schiss, weil der Compiler keinen Editor hat. Aber egal zurück zu deiner Frage.

    2. From the bin directory of your installation:

    a. Add "c:\Borland\Bcc55"

    to the existing path

    b. Create a bcc32.cfg file which will set

    the compiler options for the Include

    and Lib paths (-I and -L switches to

    compiler) by adding these lines:

    -I"c:\Borland\Bcc55\include"

    -L"c:\Borland\Bcc55\lib"

    c. Create an ilink32.cfg file which will set

    the linker option for the Lib path by

    adding this line:

    -L"c:\Borland\Bcc55\lib"

    Da steht doch genau was du machen must =)

    Aber egal,

    1. Du must zwei Dateien in verzeichnis Borland\Bcc55.

    2. Du must eine Datei erzeugen die bcc32.cfg heißt. Darin müßen Zwei Zeilen stehen: -I"c:\Borland\Bcc55\include"

    -L"c:\Borland\Bcc55\lib"

    Dann noch eine Datei ilink32.cfg. Mit inhalt: -L"c:\Borland\Bcc55\lib

    Das ist nur wenn du den Compiler mit Parametern aufrufen wilst. Ich glaube die Dateien waren bei mir aber schon fertig als ich Installiert hatte, wenn Sie bei dir nicht da sind dann mach sie eben.

    Der Compiler ist aber echt schiss. Du must eine TXT Datei mit einer Textverarbeitung erzeugen und diese dann mit parameter aufrufen. Der Compiler besitzt keinen Editor!!!

    Viel Glück =)

  3. Ich hab auf einer Englischen Seite was dazu gesehen. Ist aber in VC++

    /*

    ** FILENAME CSerialPort.h

    **

    ** PURPOSE This class can read, write and watch one serial port.

    ** It sends messages to its owner when something happends on the port

    ** The class creates a thread for reading and writing so the main

    ** program is not blocked.

    **

    ** CREATION DATE 15-09-1997

    ** LAST MODIFICATION 24-11-1998

    **

    ** AUTHOR Remon Spekreijse

    ** MODIFIED BY Brian Koh Sze Hsian

    **

    */

    #ifndef __SERIALPORT_H__

    #define __SERIALPORT_H__

    #define WM_COMM_BREAK_DETECTED WM_USER+1 // A break was detected on input.

    #define WM_COMM_CTS_DETECTED WM_USER+2 // The CTS (clear-to-send) signal changed state.

    #define WM_COMM_DSR_DETECTED WM_USER+3 // The DSR (data-set-ready) signal changed state.

    #define WM_COMM_ERR_DETECTED WM_USER+4 // A line-status error occurred. Line-status errors are CE_FRAME, CE_OVERRUN, and CE_RXPARITY.

    #define WM_COMM_RING_DETECTED WM_USER+5 // A ring indicator was detected.

    #define WM_COMM_RLSD_DETECTED WM_USER+6 // The RLSD (receive-line-signal-detect) signal changed state.

    #define WM_COMM_RXCHAR WM_USER+7 // A character was received and placed in the input buffer.

    #define WM_COMM_RXFLAG_DETECTED WM_USER+8 // The event character was received and placed in the input buffer.

    #define WM_COMM_TXEMPTY_DETECTED WM_USER+9 // The last character in the output buffer was sent.

    class CSerialPort

    {

    public:

    // contruction and destruction

    CSerialPort();

    virtual ~CSerialPort();

    // port initialisation

    BOOL InitPort(CWnd* pPortOwner, UINT portnr = 1, UINT baud = 19200, char parity = 'N', UINT databits = 8, UINT stopsbits = 1, DWORD dwCommEvents = EV_RXCHAR | EV_CTS, UINT nBufferSize = 512);

    // start/stop comm watching

    BOOL StartMonitoring();

    BOOL RestartMonitoring();

    BOOL StopMonitoring();

    DWORD GetWriteBufferSize();

    DWORD GetCommEvents();

    DCB GetDCB();

    void WriteToPort(char* string);

    void WriteToPort(char* string,int stringlength);

    protected:

    // protected memberfunctions

    void ProcessErrorMessage(char* ErrorText);

    static UINT CommThread(LPVOID pParam);

    static void ReceiveChar(CSerialPort* port, COMSTAT comstat);

    static void WriteChar(CSerialPort* port);

    // thread

    CWinThread* m_Thread;

    // synchronisation objects

    CRITICAL_SECTION m_csCommunicationSync;

    BOOL m_bThreadAlive;

    // handles

    HANDLE m_hShutdownEvent;

    HANDLE m_hComm;

    HANDLE m_hWriteEvent;

    HANDLE m_hWriteCompleteEvent;

    // Event array.

    // One element is used for each event. There are two event handles for each port.

    // A Write event and a receive character event which is located in the overlapped structure (m_ov.hEvent).

    // There is a general shutdown when the port is closed.

    HANDLE m_hEventArray[3];

    // structures

    OVERLAPPED m_ov;

    COMMTIMEOUTS m_CommTimeouts;

    DCB m_dcb;

    // owner window

    CWnd* m_pOwner;

    // misc

    UINT m_nPortNr;

    char* m_szWriteBuffer;

    DWORD m_dwCommEvents;

    DWORD m_nWriteBufferSize;

    int m_nActualWriteBufferSize;

    };

    #endif __SERIALPORT_H__

    /*

    ** FILENAME CSerialPort.cpp

    **

    ** PURPOSE This class can read, write and watch one serial port.

    ** It sends messages to its owner when something happends on the port

    ** The class creates a thread for reading and writing so the main

    ** program is not blocked.

    **

    ** CREATION DATE 15-09-1997

    ** LAST MODIFICATION 24-11-1998

    **

    ** AUTHOR Remon Spekreijse

    ** MODIFIED BY Brian Koh Sze Hsian

    **

    */

    #include "stdafx.h"

    #include "SerialPort.h"

    #include <assert.h>

    //

    // Constructor

    //

    CSerialPort::CSerialPort()

    {

    m_hComm = NULL;

    // initialize overlapped structure members to zero

    m_ov.Offset = 0;

    m_ov.OffsetHigh = 0;

    // create events

    m_ov.hEvent = NULL;

    m_hWriteEvent = NULL;

    m_hShutdownEvent = NULL;

    m_szWriteBuffer = NULL;

    m_bThreadAlive = FALSE;

    m_hWriteCompleteEvent=NULL;

    }

    //

    // Delete dynamic memory

    //

    CSerialPort::~CSerialPort()

    {

    // resume the thread if it was suspended. Needed to process m_hShutdownEvent!

    if(m_Thread != NULL)

    {

    DWORD dwSuspendCount;

    do

    {

    dwSuspendCount = m_Thread->ResumeThread();

    }

    while((dwSuspendCount != 0) && (dwSuspendCount != 0xffffffff) );

    do

    {

    SetEvent(m_hShutdownEvent);

    }

    while (m_bThreadAlive);

    TRACE("Thread ended\n");

    }

    // close handles to avoid memory leaks

    CloseHandle(m_ov.hEvent);

    CloseHandle(m_hWriteEvent);

    CloseHandle(m_hComm);

    CloseHandle(m_hShutdownEvent);

    CloseHandle(m_hWriteCompleteEvent);

    m_hComm = NULL;

    m_ov.hEvent = NULL;

    m_hWriteEvent = NULL;

    m_hShutdownEvent = NULL;

    m_hWriteCompleteEvent = NULL;

    if (m_szWriteBuffer != NULL)

    delete [] m_szWriteBuffer;

    DeleteCriticalSection(&m_csCommunicationSync);

    }

    //

    // Initialize the port. This can be port 1 to 4.

    //

    BOOL CSerialPort::InitPort(CWnd* pPortOwner, // the owner (CWnd) of the port (receives message)

    UINT portnr, // portnumber (1..4)

    UINT baud, // baudrate

    char parity, // parity

    UINT databits, // databits

    UINT stopbits, // stopbits

    DWORD dwCommEvents, // EV_RXCHAR, EV_CTS etc

    UINT writebuffersize) // size to the writebuffer

    {

    assert(portnr > 0 && portnr < 5);

    assert(pPortOwner != NULL);

    // if the thread is alive: Kill

    if (m_bThreadAlive)

    {

    do

    {

    SetEvent(m_hShutdownEvent);

    } while (m_bThreadAlive);

    TRACE("Thread ended\n");

    }

    // create events

    if (m_ov.hEvent != NULL)

    ResetEvent(m_ov.hEvent);

    m_ov.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);

    if (m_hWriteEvent != NULL)

    ResetEvent(m_hWriteEvent);

    m_hWriteEvent = CreateEvent(NULL, TRUE, FALSE, NULL);

    if (m_hShutdownEvent != NULL)

    ResetEvent(m_hShutdownEvent);

    m_hShutdownEvent = CreateEvent(NULL, TRUE, FALSE, NULL);

    if(m_hWriteCompleteEvent != NULL)

    ResetEvent(m_hWriteCompleteEvent);

    m_hWriteCompleteEvent = CreateEvent(NULL, TRUE, FALSE, NULL);

    // initialize the event objects

    m_hEventArray[0] = m_hShutdownEvent; // highest priority

    m_hEventArray[1] = m_ov.hEvent;

    m_hEventArray[2] = m_hWriteEvent;

    // initialize critical section

    InitializeCriticalSection(&m_csCommunicationSync);

    // set buffersize for writing and save the owner

    m_pOwner = pPortOwner;

    if (m_szWriteBuffer != NULL)

    delete [] m_szWriteBuffer;

    m_szWriteBuffer = new char[writebuffersize];

    m_nPortNr = portnr;

    m_nWriteBufferSize = writebuffersize;

    m_dwCommEvents = dwCommEvents;

    BOOL bResult = FALSE;

    char *szPort = new char[50];

    char *szBaud = new char[50];

    // now it critical!

    EnterCriticalSection(&m_csCommunicationSync);

    // if the port is already opened: close it

    if (m_hComm != NULL)

    {

    CloseHandle(m_hComm);

    m_hComm = NULL;

    }

    // prepare port strings

    sprintf(szPort, "COM%d", portnr);

    sprintf(szBaud, "baud=%d parity=%c data=%d stop=%d", baud, parity, databits, stopbits);

    // get a handle to the port

    m_hComm = CreateFile(szPort, // communication port string (COMX)

    GENERIC_READ | GENERIC_WRITE, // read/write types

    0, // comm devices must be opened with exclusive access

    NULL, // no security attributes

    OPEN_EXISTING, // comm devices must use OPEN_EXISTING

    FILE_FLAG_OVERLAPPED, // Async I/O

    0); // template must be 0 for comm devices

    if (m_hComm == INVALID_HANDLE_VALUE)

    {

    // port not found

    delete [] szPort;

    delete [] szBaud;

    return FALSE;

    }

    // set the timeout values

    m_CommTimeouts.ReadIntervalTimeout = 1000;

    m_CommTimeouts.ReadTotalTimeoutMultiplier = 1000;

    m_CommTimeouts.ReadTotalTimeoutConstant = 1000;

    m_CommTimeouts.WriteTotalTimeoutMultiplier = 1000;

    m_CommTimeouts.WriteTotalTimeoutConstant = 1000;

    // configure

    if (SetCommTimeouts(m_hComm, &m_CommTimeouts))

    {

    if (SetCommMask(m_hComm, dwCommEvents))

    {

    if (GetCommState(m_hComm, &m_dcb))

    {

    m_dcb.fRtsControl = RTS_CONTROL_ENABLE; // set RTS bit high!

    if (BuildCommDCB(szBaud, &m_dcb))

    {

    if (SetCommState(m_hComm, &m_dcb))

    ; // normal operation... continue

    else

    ProcessErrorMessage("SetCommState()");

    }

    else

    ProcessErrorMessage("BuildCommDCB()");

    }

    else

    ProcessErrorMessage("GetCommState()");

    }

    else

    ProcessErrorMessage("SetCommMask()");

    }

    else

    ProcessErrorMessage("SetCommTimeouts()");

    delete [] szPort;

    delete [] szBaud;

    // flush the port

    PurgeComm(m_hComm, PURGE_RXCLEAR | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_TXABORT);

    // release critical section

    LeaveCriticalSection(&m_csCommunicationSync);

    TRACE("Initialisation for communicationport %d completed.\nUse Startmonitor to communicate.\n", portnr);

    return TRUE;

    }

    //

    // The CommThread Function.

    //

    UINT CSerialPort::CommThread(LPVOID pParam)

    {

    // Cast the void pointer passed to the thread back to

    // a pointer of CSerialPort class

    CSerialPort *port = (CSerialPort*)pParam;

    // Set the status variable in the dialog class to

    // TRUE to indicate the thread is running.

    port->m_bThreadAlive = TRUE;

    // Misc. variables

    DWORD BytesTransfered = 0;

    DWORD Event = 0;

    DWORD CommEvent = 0;

    DWORD dwError = 0;

    COMSTAT comstat;

    BOOL bResult = TRUE;

    // Clear comm buffers at startup

    if (port->m_hComm) // check if the port is opened

    PurgeComm(port->m_hComm, PURGE_RXCLEAR | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_TXABORT);

    // begin forever loop. This loop will run as long as the thread is alive.

    for (; wink.gif

    {

    // Make a call to WaitCommEvent(). This call will return immediatly

    // because our port was created as an async port (FILE_FLAG_OVERLAPPED

    // and an m_OverlappedStructerlapped structure specified). This call will cause the

    // m_OverlappedStructerlapped element m_OverlappedStruct.hEvent, which is part of the m_hEventArray to

    // be placed in a non-signeled state if there are no bytes available to be read,

    // or to a signeled state if there are bytes available. If this event handle

    // is set to the non-signeled state, it will be set to signeled when a

    // character arrives at the port.

    // we do this for each port!

    bResult = WaitCommEvent(port->m_hComm, &Event, &port->m_ov);

    if (!bResult)

    {

    // If WaitCommEvent() returns FALSE, process the last error to determin

    // the reason..

    switch (dwError = GetLastError())

    {

    case ERROR_IO_PENDING:

    {

    // This is a normal return value if there are no bytes

    // to read at the port.

    // Do nothing and continue

    break;

    }

    case 87:

    {

    // Under Windows NT, this value is returned for some reason.

    // I have not investigated why, but it is also a valid reply

    // Also do nothing and continue.

    break;

    }

    default:

    {

    // All other error codes indicate a serious error has

    // occured. Process this error.

    port->ProcessErrorMessage("WaitCommEvent()");

    break;

    }

    }

    }

    else

    {

    // If WaitCommEvent() returns TRUE, check to be sure there are

    // actually bytes in the buffer to read.

    //

    // If you are reading more than one byte at a time from the buffer

    // (which this program does not do) you will have the situation occur

    // where the first byte to arrive will cause the WaitForMultipleObjects()

    // function to stop waiting. The WaitForMultipleObjects() function

    // resets the event handle in m_OverlappedStruct.hEvent to the non-signelead state

    // as it returns.

    //

    // If in the time between the reset of this event and the call to

    // ReadFile() more bytes arrive, the m_OverlappedStruct.hEvent handle will be set again

    // to the signeled state. When the call to ReadFile() occurs, it will

    // read all of the bytes from the buffer, and the program will

    // loop back around to WaitCommEvent().

    //

    // At this point you will be in the situation where m_OverlappedStruct.hEvent is set,

    // but there are no bytes available to read. If you proceed and call

    // ReadFile(), it will return immediatly due to the async port setup, but

    // GetOverlappedResults() will not return until the next character arrives.

    //

    // It is not desirable for the GetOverlappedResults() function to be in

    // this state. The thread shutdown event (event 0) and the WriteFile()

    // event (Event2) will not work if the thread is blocked by GetOverlappedResults().

    //

    // The solution to this is to check the buffer with a call to ClearCommError().

    // This call will reset the event handle, and if there are no bytes to read

    // we can loop back through WaitCommEvent() again, then proceed.

    // If there are really bytes to read, do nothing and proceed.

    bResult = ClearCommError(port->m_hComm, &dwError, &comstat);

    if (comstat.cbInQue == 0)

    continue;

    } // end if bResult

    // Main wait function. This function will normally block the thread

    // until one of nine events occur that require action.

    Event = WaitForMultipleObjects(3, port->m_hEventArray, FALSE, INFINITE);

    switch (Event)

    {

    case 0:

    {

    // Shutdown event. This is event zero so it will be

    // the higest priority and be serviced first.

    port->m_bThreadAlive = FALSE;

    // Kill this thread. break is not needed, but makes me feel better.

    AfxEndThread(100);

    break;

    }

    case 1: // read event

    {

    GetCommMask(port->m_hComm, &CommEvent);

    if (CommEvent & EV_CTS)

    ::SendMessage(port->m_pOwner->m_hWnd, WM_COMM_CTS_DETECTED, (WPARAM) 0, (LPARAM) port->m_nPortNr);

    if (CommEvent & EV_RXFLAG)

    ::SendMessage(port->m_pOwner->m_hWnd, WM_COMM_RXFLAG_DETECTED, (WPARAM) 0, (LPARAM) port->m_nPortNr);

    if (CommEvent & EV_BREAK)

    ::SendMessage(port->m_pOwner->m_hWnd, WM_COMM_BREAK_DETECTED, (WPARAM) 0, (LPARAM) port->m_nPortNr);

    if (CommEvent & EV_ERR)

    ::SendMessage(port->m_pOwner->m_hWnd, WM_COMM_ERR_DETECTED, (WPARAM) 0, (LPARAM) port->m_nPortNr);

    if (CommEvent & EV_RING)

    ::SendMessage(port->m_pOwner->m_hWnd, WM_COMM_RING_DETECTED, (WPARAM) 0, (LPARAM) port->m_nPortNr);

    if (CommEvent & EV_RXCHAR)

    // Receive character event from port.

    ReceiveChar(port, comstat);

    break;

    }

    case 2: // write event

    {

    // Write character event from port

    WriteChar(port);

    break;

    }

    } // end switch

    } // close forever loop

    return 0;

    }

    //

    // start comm watching

    //

    BOOL CSerialPort::StartMonitoring()

    {

    if (!(m_Thread = AfxBeginThread(CommThread, this)))

    return FALSE;

    TRACE("Thread started\n");

    return TRUE;

    }

    //

    // Restart the comm thread

    //

    BOOL CSerialPort::RestartMonitoring()

    {

    TRACE("Thread resumed\n");

    m_Thread->ResumeThread();

    return TRUE;

    }

    //

    // Suspend the comm thread

    //

    BOOL CSerialPort::StopMonitoring()

    {

    TRACE("Thread suspended\n");

    m_Thread->SuspendThread();

    return TRUE;

    }

    //

    // If there is a error, give the right message

    //

    void CSerialPort::ProcessErrorMessage(char* ErrorText)

    {

    char *Temp = new char[200];

    LPVOID lpMsgBuf;

    FormatMessage(

    FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,

    NULL,

    GetLastError(),

    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language

    (LPTSTR) &lpMsgBuf,

    0,

    NULL

    );

    sprintf(Temp, "WARNING: %s Failed with the following error: \n%s\nPort: %d\n", (char*)ErrorText, lpMsgBuf, m_nPortNr);

    MessageBox(NULL, Temp, "Application Error", MB_ICONSTOP);

    LocalFree(lpMsgBuf);

    delete[] Temp;

    }

    //

    // Write a character.

    //

    void CSerialPort::WriteChar(CSerialPort* port)

    {

    BOOL bWrite = TRUE;

    BOOL bResult = TRUE;

    DWORD BytesSent = 0;

    ResetEvent(port->m_hWriteEvent);

    // Gain ownership of the critical section

    EnterCriticalSection(&port->m_csCommunicationSync);

    if (bWrite)

    {

    // Initailize variables

    port->m_ov.Offset = 0;

    port->m_ov.OffsetHigh = 0;

    // Clear buffer

    PurgeComm(port->m_hComm, PURGE_RXCLEAR | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_TXABORT);

    bResult = WriteFile(port->m_hComm, // Handle to COMM Port

    port->m_szWriteBuffer, // Pointer to message buffer in calling finction

    port->m_nActualWriteBufferSize,

    // strlen(port->m_szWriteBuffer), // Length of message to send

    &BytesSent, // Where to store the number of bytes sent

    &port->m_ov); // Overlapped structure

    // deal with any error codes

    if (!bResult)

    {

    DWORD dwError = GetLastError();

    switch (dwError)

    {

    case ERROR_IO_PENDING:

    {

    // continue to GetOverlappedResults()

    BytesSent = 0;

    bWrite = FALSE;

    break;

    }

    default:

    {

    // all other error codes

    port->ProcessErrorMessage("WriteFile()");

    }

    }

    }

    else

    {

    LeaveCriticalSection(&port->m_csCommunicationSync);

    }

    } // end if(bWrite)

    if (!bWrite)

    {

    bWrite = TRUE;

    bResult = GetOverlappedResult(port->m_hComm, // Handle to COMM port

    &port->m_ov, // Overlapped structure

    &BytesSent, // Stores number of bytes sent

    TRUE); // Wait flag

    LeaveCriticalSection(&port->m_csCommunicationSync);

    // deal with the error code

    if (!bResult)

    {

    port->ProcessErrorMessage("GetOverlappedResults() in WriteFile()");

    }

    } // end if (!bWrite)

    // Verify that the data size send equals what we tried to send

    if (BytesSent != strlen((char*)port->m_szWriteBuffer))

    {

    TRACE("WARNING: WriteFile() error.. Bytes Sent: %d; Message Length: %d\n", BytesSent, strlen((char*)port->m_szWriteBuffer));

    }

    SetEvent(port->m_hWriteCompleteEvent);

    }

    //

    // Character received. Inform the owner

    //

    void CSerialPort::ReceiveChar(CSerialPort* port, COMSTAT comstat)

    {

    BOOL bRead = TRUE;

    BOOL bResult = TRUE;

    DWORD dwError = 0;

    DWORD BytesRead = 0;

    unsigned char RXBuff;

    for (; wink.gif

    {

    // Gain ownership of the comm port critical section.

    // This process guarantees no other part of this program

    // is using the port object.

    EnterCriticalSection(&port->m_csCommunicationSync);

    // ClearCommError() will update the COMSTAT structure and

    // clear any other errors.

    bResult = ClearCommError(port->m_hComm, &dwError, &comstat);

    LeaveCriticalSection(&port->m_csCommunicationSync);

    // start forever loop. I use this type of loop because I

    // do not know at runtime how many loops this will have to

    // run. My solution is to start a forever loop and to

    // break out of it when I have processed all of the

    // data available. Be careful with this approach and

    // be sure your loop will exit.

    // My reasons for this are not as clear in this sample

    // as it is in my production code, but I have found this

    // solutiion to be the most efficient way to do this.

    if (comstat.cbInQue == 0)

    {

    // break out when all bytes have been read

    break;

    }

    EnterCriticalSection(&port->m_csCommunicationSync);

    if (bRead)

    {

    bResult = ReadFile(port->m_hComm, // Handle to COMM port

    &RXBuff, // RX Buffer Pointer

    1, // Read one byte

    &BytesRead, // Stores number of bytes read

    &port->m_ov); // pointer to the m_ov structure

    // deal with the error code

    if (!bResult)

    {

    switch (dwError = GetLastError())

    {

    case ERROR_IO_PENDING:

    {

    // asynchronous i/o is still in progress

    // Proceed on to GetOverlappedResults();

    bRead = FALSE;

    break;

    }

    default:

    {

    // Another error has occured. Process this error.

    port->ProcessErrorMessage("ReadFile()");

    break;

    }

    }

    }

    else

    {

    // ReadFile() returned complete. It is not necessary to call GetOverlappedResults()

    bRead = TRUE;

    }

    } // close if (bRead)

    if (!bRead)

    {

    bRead = TRUE;

    bResult = GetOverlappedResult(port->m_hComm, // Handle to COMM port

    &port->m_ov, // Overlapped structure

    &BytesRead, // Stores number of bytes read

    TRUE); // Wait flag

    // deal with the error code

    if (!bResult)

    {

    port->ProcessErrorMessage("GetOverlappedResults() in ReadFile()");

    }

    } // close if (!bRead)

    LeaveCriticalSection(&port->m_csCommunicationSync);

    // notify parent that a byte was received

    ::SendMessage((port->m_pOwner)->m_hWnd, WM_COMM_RXCHAR, (WPARAM) RXBuff, (LPARAM) port->m_nPortNr);

    } // end forever loop

    }

    //

    // Write a string to the port - This can write even NULL characters

    //

    void CSerialPort::WriteToPort(char* string, int stringlength)

    {

    assert(m_hComm != 0);

    ResetEvent(m_hWriteCompleteEvent);

    EnterCriticalSection(&m_csCommunicationSync);

    memset(m_szWriteBuffer, 0, sizeof(m_szWriteBuffer));

    for(int i=0;i<stringlength;i++)

    m_szWriteBuffer=string;

    m_nActualWriteBufferSize=stringlength;

    LeaveCriticalSection(&m_csCommunicationSync);

    // set event for write

    SetEvent(m_hWriteEvent);

    WaitForSingleObject(m_hWriteCompleteEvent,INFINITE);

    }

    //

    // Return the device control block

    //

    DCB CSerialPort::GetDCB()

    {

    return m_dcb;

    }

    //

    // Return the communication event masks

    //

    DWORD CSerialPort::GetCommEvents()

    {

    return m_dwCommEvents;

    }

    //

    // Return the output buffer size

    //

    DWORD CSerialPort::GetWriteBufferSize()

    {

    return m_nWriteBufferSize;

    }

  4. Dev-C++ 4 ist der beste Freeware Compiler denn ich kenne.

    Du bekommst ihn auf http://download.cnet.com/downloads/0-10085-100-1683220.html

    Natürlich brauchst du noch lektüre, ein paar totorials bekommst du auf http://www.c-plusplus.de/tutorials.htm oder du bekommst ein komplettes Buch unter http://www.mut.de/leseecke/leseecke.asp

    Da gibts zwar nur ein buch über Visual C++ das ist aber lette (du kannst das komplette Buch vom Hersteller runterladen =)

  5. OK mit dem Lernen habt ihr schon recht,

    aber wenn ich eine Ausbildung anfange erwarte ich doch zumindest das ich was vom Betrieb aus lerne.

    Ich hab kein Praktikum in meiner Firma gemacht und konnte daher auch nicht erfahren wie sie ist. Naja so schlecht ist das ja auch nicht das ich beschäftige mich schon selbt aber der Nutzen einer Ausbildung geht dabei verloren.

  6. @CaptainKirk

    Ok, ich gehe mal deinen Tipp durch. Computer, Internetanschluss, die Programme die ich an der Arbeit benutze habe ich alles daheim. Wozu dann noch in den Betrieb gehen??

    Die idea ist gut ich schnapp mir meine Lehrplan und mache meine Ausbildung daheim, danach mache ich eine andere Ausbildung daheim.

    Daja mal im Ernst wozu gehe ich dann noch hin wenn ich das alles daheim machen kann?? Die Ausbildung muss mir doch was nützen. Das das tut sie in meinem Fahl nicht.

  7. Option Explicit

    Private Sub Command1_Click()

    Uhhhhhhh....

    Ein Code ist ja grauenvoll. Der besteht ja nur aus IF befehlen. Blöderweise kann ich kein Delphi aber weil Delphi und Visual Basic ähnlich sind hab ich mal dein Programm in VB geschrieben. Vieleicht hilft es dir ja weiter, wenn du den Code in Delphi schreibst.

    Dim Text As String 'Variablen werden Deklariert

    Dim N As Integer

    Dim TextZeichen As String * 1

    Dim Punkt As Integer, Komma As Integer, Zahl As Integer, Buch As Integer

    Text = Text1 'der Text wird zugewiesen

    For N = Len(Text) To 0 Step -1 'Die schleife fährt die Zeichenkette ab

    TextZeichen = Mid$(Text, N, 1) 'Ich holle mir ein Zeichen aus der Zeichenkette

    If TextZeichen = "." Then Punkt = Punkt + 1 'wenn Zeichen . ist dann Zähler +1

    If TextZeichen = "," Then Komma = Komma + 1 'wenn Zeichen , ist dann Zähler +1

    Select Case TextZeichen

    Case 1 To 9

    Zahl = Zahl + 1

    Case "a" To "z"

    Buch = Buch + 1

    End Select

    If N = 1 Then Exit For

    Next

    MsgBox ("Punkt: " & Punkt)

    MsgBox ("Komma: " & Komma)

    MsgBox ("Zahlen: " & Zahl)

    MsgBox ("Buchstaben: " & Buch)

    End Sub

  8. /* kannst also den ganzen Tag machen und tun was Du willst. Nutz das doch aus! Probier, studier, mach was! Kauf Dir Bücher und lese die, surf im Internet und hol Dir Input.

    Ich würd was drum geben, wenn ich meinen nervenden Ausbilder (sorry Frank ) los wäre. Think positiv. Mach was draus. */ ( C )

    Na was denkst du denn was ich denn ganzen Tag mache?? ich programmier eigentlich denn ganzen Tag. Aber irgentwie wird mich das in meiner Ausbildung auch nicht weiter bringen. Sonst lerne ich eigentlich nichts. (Ist ja auch gut das nur programmieren beim Test der IHK vorkommen )-). Also so toll ist das auf die Dauer auch nicht.

    ------------------

  9. Ob das so egal ist bin ich mir nicht sicher. Die SI machen schon was anderes als die AW. Soch kenne ich es zumindes aus der schule.

    Ich wollte erst SI bin aber doch froh das ich AW bin.

    Ach noch was probier infos über den Betrieb zu bekommen!!! Dann kanst du abschätzen was du dann da machst. Ich find das z.b voll arm was die FISI bei Siemens machen müssen (Metallarbeiten in der Ausbildung, die IT-Systemelektroniker installieren Alarmanlagen, Ampelanlagen (echt klasse :-D )).

    Oder wie ich mache ich nichts bei mir (schau mal in den Ausbildung/Job in den IT-Berufen Forum Thema Thema: Scheiß Ausbildung!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! )

  10. Das mit den ! muste einfach mal sein. Egal fange ich mal an.

    habe am 08.08.00 meine Ausbildung angefangen, zum FIAW, in der Schule komme ich eigentlich klar obwohl ich der einzige FIAW in meiner Klasse bin der Realschulabschluss hat. (Davon kann ich mir dann auch was kaufen)

    Mit jemanden sprechen?? ich weiß nicht so recht mit wem ich in meiner 6 Mann Firma so reden solte, der Chef hat garkeine peilung, mein Ausbilder ist dauert weg (und in der letzden Zeit auch mieß gelaunt), der andere Mitarbeiter will sich da raushalten. Dann gibts noch die Sekreterin und den anderen AZUBI. Alles scheiße!!!!!!!!!! (Da sind sie wieder =) ), (die klamern kommen vom Programmieren :-D).

    Denn ganzen Tag beschäftige ich mich irgentwie mit Computer oder schreibe gerade in ein Forum.

  11. Wiso das so ist weiß ich auch net, du kannst die Position ja im unteren Rechten Fenster festlegen (heißt Formula-Layout (ja ich muste nachschauen)). (Die vielen klammern kommen vom Programmieren :-) ). Wenn du das andere Form aufrufst kannst du ja die eigenschaften von dem Form festlegen mach das doch einfach bei allen drei. z.b

    form2.height= 1015

    form2.width=1500

    form2.top=30

    form2.left=60

    form2.show

    ich hoffe das war ein bischen verständlich.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...