Announcement

Collapse
No announcement yet.

Pointer ???

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

  • Pointer ???

    Hallo,<br><br>
    ich habe eine ActiveX-Komponente installiert. Funktioniert alles ganz gut, ausser einer Funktion die als Parameter einen Pointer erwaretet: <br><br>

    GetFolderFieldNames<br>
    Note: This method intended for use with C/C++.<br>
    short GetFolderFieldNames(
    IUnknown * pNames,
    short MaxNames )<br>
    Parameters: <br>
    pNames<br>
    Points to an array of ArsOleValues to receive the folder field names. The array must
    have at least MaxNames elements.<br><br>
    MaxNames<br>
    Specifies the maximum number of names to be returned.<br><br>
    Description: <br>
    The names of the folder fields, up to a maximum of MaxNames, are returned in
    pNames. Each name is a null-terminated character string.
    The names are placed in the array in the same sequence that should be used with the
    method StoreDoc.
    GetFolderFieldName or GetFolderFieldNames can be used to retrieve the folder field
    names. An application should use the one which is more convenient in its
    environment.<br><br>
    Return Value: <br>
    Refer to “Return Code” on page 4 for an explanation of the return code.<br><br>
    Das C++ Beispiel sieht wie folgt aus:<br><br>
    VARIANT var;<br>
    CArsOle * pArsCtrl;<br>
    ArsOleName * pNames;<br>
    short rc, j;<br>
    .<br>
    .<br>
    // m_NumFolderFields is a class variable <br<
    m_NumFolderFields = var.iVal;<br>
    pNames = new ArsOleName[ max( m_NumFolderFields, 1 ) ];<br>
    rc = pArsCtrl->GetFolderFieldNames( (IUnknown*)pNames, m_NumFolderFields );<br><br>
    Mein Quelltext sieht wie folgt aus... aber ParmVar bleibt immer leer <br><br>
    VAR ParmVar : OleVariant;<br><br>
    return_code := form1.ArsOle1.GetFolderFieldNames(ParmVar , 5);<br>
    ParmVar := VarArrayCreate([0,4], varVariant);<br>
    tmp := ParmVar[0];<br><br><br>
    irgendwie ist mir das alles zu hoch, und ich bin etwas aufgeschmissen....

  • #2
    <pre>
    var
    PointerList: array [0..4] of IUnknown;
    begin
    return_code := form1.ArsOle1.GetFolderFieldNames(@PointerList[0], 5);
    </pre>
    Wie die Hilfe sagt ist der Parameter ein Zeiger auf das erste Element eines Arrays. Das Array muss Platz fuer so viele Zeiger haben wie der zweite Parameter angibt.<br>
    Also musst du ein passendes Array anlegen und den Zeiger auf das erste Element uebergeben. Genau das macht die obige Source.<br>
    Der Aufruf platziert dann entsprechend viele Zeiger darin. Wenn es weniger Elemente zum Zurueckliefern gibt dann steht im letzten ein nil-Zeiger

    Comment


    • #3
      Danke Robert ich werds Montag direkt mal versuchen.... Du hast mir sehr geholfen!

      <br><br>
      Jetzt wo Du sagst, hört es sich auch ganz einfach an ;-

      Comment


      • #4
        Hallo Robert, <br><br>
        wenn ich Deinen Code Probiere, bekomme ich beim Compelieren die Meldung "Inkompatible Typen: 'Pointer' und 'IUnknown'" <br><br>
        Wenn ich <br>"return_code := form1.ArsOle1.GetFolderFieldNames(PointerList[0], 5);<br>
        code, wird es kompeliert aber ich bekomme ein Array mit lauter "Nil"s zurück

        Comment


        • #5
          Ach ja. Ich hatte vergessen das in _TLB.pas files immer zu "var" konvertiert wird.<br>
          Dein neuer Aufruf ist also korrekt. Pruef doch mal nach was der return_code besagt

          Comment


          • #6
            als Returncode bekomme ich 0 zurück was laut Docu auf keinen Fehler hinweisst. Aber ich müsste in diesem Array 4 Werte zurückbekommen

            Comment

            Working...
            X