Announcement

Collapse
No announcement yet.

Problem mit LPTSTR...

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem mit LPTSTR...

    Hallo,

    ich habe folgenden source, wobei aber beim Kopieren der Informationen Fehler entstehen.
    <pre>
    typedef struct _TEST1 {
    LPTSTR lpStr1;
    DWORD cbStr1;
    } TEST1, FAR *LPTEST1;<br><br>

    LPTEST1 lpTest<br>
    LPTSTR RetVal <br><br>

    RetVal = "...";
    strcpy( lpTest->lpStr1, RetVal);
    lpTest->cbStr1= strlen (RetVal) * sizeof(BYTE);
    </pre>

    Was mache ich falsch?

    Tschüss Tim

  • #2
    lpTest und lpStr1 sind Zeiger, die ins Nirwana zeigen. Du mußt erst einmal Speicherplatz reservieren..
    Günther

    Comment


    • #3
      Hallo Günther,

      wie müsste es dann aussehen (Aufruf mit malloc)?

      Tschüss Ti

      Comment


      • #4
        <html>

        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
        <meta name="GENERATOR" content="Microsoft FrontPage 4.0">
        <meta name="ProgId" content="FrontPage.Editor.Document">
        <title>Neue Seite 1</title>
        </head>

        <body>

        <pre><font size="3">typedef struct _TEST1 {
        LPTSTR lpStr1;
        DWORD cbStr1;
        } TEST1, FAR *LPTEST1;
        </pre>
        <pre>
        LPTEST1 lpTest;
        </pre>
        <pre>
        void Test(void)
        {
        LPTSTR RetVal;
        RetVal = &quot;...&quot;;
        lpTest=farmalloc(sizeof(struct _TEST1));
        lpTest-&gt;cbStr1= strlen (RetVal) * sizeof(BYTE);
        lpTest-&gt;lpStr1=farmalloc(lpTest-&gt;cbStr1+1);
        strcpy( lpTest-&gt;lpStr1, RetVal);
        }</font></pre>

        </body>

        </html&gt
        Günther

        Comment


        • #5
          Hallo Günther,

          in welchem Header ist "farmalloc()" definiert. Ich konnte im MSDN leider dazu nichts finden und im Internet stand etwas von "alloc.h", leider habe ich aber diese Header-Datei bei VC++ 6 scheinbar nicht.

          Gibt es eine Möglichkleit diese Datei irgendwo anders zu beziehen?

          Tschüss Ti

          Comment


          • #6
            <html>

            <head>
            <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
            <meta name="GENERATOR" content="Microsoft FrontPage 4.0">
            <meta name="ProgId" content="FrontPage.Editor.Document">
            <title>Neue Seite 1</title>
            </head>

            <body>

            <p>Hallo Tim, malloc und farmalloc dürften unter WIN32 identisch sein. Ich
            benutze farmalloc aus Gewohnheit, weil mein wichtigstes Programm bis vor kurzem
            für DOS, WIN16 und WIN32 vorgesehen war und in den wesentlichen Funktionen
            gemeinsame Quelltextdateien für alle Systeme hatte. Da hatte ich mal Probleme mit malloc. farmalloc ist
            möglicherweise eine Borland - Eigenkreation:</p>
            <p>Aus der Hilfe &quot;Borland C++-Programmierhandbuch&quot;, Borland C++ 5.02:</p>
            <p><b>farmalloc</b><br>
            <br>
            #include &lt;alloc.h><br>
            void far *farmalloc(unsigned long nbytes);<br>
            <br>
            farmalloc reserviert einen Speicherblock von nbytes Größe auf dem FAR-Heap. Bei der Arbeit mit dem FAR-Heap sind einige sonst vorhandene Grenzen aufgehoben:
            der gesamte verfügbare RAM-Speicherplatz kann reserviert werden; die Größe einzelner Blöcke kann 64 KByte überschreiten; für Zugriffe auf die Blöcke müssen grundsätzlich far-Zeiger benutzt werden.<br>
            <br>
            Bei Verwendung der Speichermodelle Compact, Large oder Huge verhält sich farmalloc ähnlich wie die Funktion malloc - identisch sind sie aber nicht: die Parameter von malloc sind vom Typ unsigned, die von farmalloc dagegen vom Typ unsigned long. Für DOS-Anwender gilt, daß Programme bei Einsatz des Speichermodells Tiny farmalloc nicht verwenden können.<br>
            <br>
            Rückgabewert: farmalloc liefert einen far-Zeiger auf die Startadresse des neu reservierten Speicherblocks zurück. Wenn nicht genügend Platz zur Verfügung steht, wird der Zeigerwert NULL zurückgeliefert.<br>
            <br>
            <b>malloc</b></p>
            <p>#include &lt;stdlib.h> or #include&lt;alloc.h><br>
            void *malloc(size_t size);<br>
            <br>
            malloc reserviert einen Speicherbereich von size Bytes auf dem Heap. Damit kann ein Programm Speicherplatz genau nach Bedarf und exakt in der benötigten Größe reservieren.
            Es wird Hauptspeicher reserviert. Der Heap wird für die dynamische Reservierung von Speicherbereichen variabler Größe benutzt. Viele Datenstrukturen wie beispielsweise Bäume und Listen reservieren Speicher auf dem
            Heap. In den kleinen Datenmodellen wird mit near-Zeigern gearbeitet, der Heap liegt zwischen dem oberen Ende des Datensegments und dem unteren Ende des Stack. Der Heap reserviert den gesamten hier zur Verfügung stehenden Speicherbereich bis auf einige Bytes direkt unterhalb der Stack-Spitze, die für Stack-Vergrößerungen und für das Betriebssystem reserviert sind.&nbsp;<br>
            <br>
            In den großen Datenmodellen wird mit far-Zeigern gearbeitet, der Heap beginnt oberhalb des Stack und endet mit der höchsten vom System zur Verfügung gestellten Speicheradresse.<br>
            <br>
            Rückgabewert: malloc liefert bei fehlerfreier Ausführung einen Zeiger, der auf den neu reservierten Speicherbereich zeigt. Wenn kein Speicherbereich ausreichender Größe zur Verfügung steht, dann ist der Rückgabewert NULL. Es findet keine Initialisierung des Speicherblocks statt. Wenn der Parameter size den Wert 0 hat, liefert malloc NULL zurück.<br>

            Einfach nur eine Headerdatei besorgen, wird nicht gutgehen. Du brauchst dann ja auch eine Library mit dem Code. Bleib also bei malloc.
            <br>
            Gruß - Günther</p>

            </body>

            </html&gt
            Günther

            Comment


            • #7
              Hallo Günther,

              danke für die Informationen.

              Mein Problem lag an einer FreeLibrary-Prozedur, die den Inhalt von Retval gelöscht hat.

              Tschüss Ti

              Comment

              Working...
              X