Announcement

Collapse
No announcement yet.

OleVariant unbekannter Typ 17?

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

  • OleVariant unbekannter Typ 17?

    In der Kommunikation mit einer 3-Party OCX Komponente erhalte ich in einem Event einen OleVariant. Wenn ich eine Typenumwandlung in einen String vornehmen möchte, erhalte ich eine Exception "unbekannter Typ 17".
    Wurden seit Delphi5 neue Typen eingeführt?

    Besten Dank.
    Christoph Schneider
    Schneider Infosystems AG, Schweiz

    http://www.schneider-infosys.ch

  • #2
    Hallo,

    was sagt die Dokumentation der 3-Party OCX Komponente an dieser Stelle? Was wird da übergeben und wer ist für das Sink-Objekt der Connection Point-Schnittstelle zuständig (ein eigenes Sink-Objekt oder die von Delphi 5 beim Import der Typbibliothek generierte Wrapper-Komponente)

    Comment


    • #3
      Hallo Andreas

      In der Dokumentation der 3-Party OCX Komponente wird als Datentyp String angegeben. Nach dem ActiveX Import in D5 erhalte ich aber ein OleVariant als Typ.

      Es gibt einen Fall, bei dem ich von der Komponente eine Meldung erhalte, die ich aber nicht interpretieren kann. Wenn ich den OleVariant einem StringTyp zuweisen will, erhalte ich eine Exception mit dem Hinweis:"Unbekannter Typ 17" . Neben dieser Meldung wird ein zweiter Parameter übergeben, welcher die Meldungs-Länge angibt. Sie beträgt in diesem Fall 16.

      Wenn ich im Debugger im Evaluatorfenster den OleVariant (var Message) betrachten will, wird als Ergebnis "Variant Array of Byte" ausgegeben. Ich habe daraufhin noch folgende weitere Auswertungen gemacht:

      TVarData( Message ).VType -> 8209

      TVarData( Message ).VOleStr -> #1' '#1

      pchar( TVarData( Message ).VString )[0] -> #1

      pchar( TVarData( Message ).VString )[1] -> #0

      pchar( TVarData( Message ).VString )[2] -> #0

      pchar( TVarData( Message ).VString )[3] -> ' ' (#32)

      pchar( TVarData( Message ).VString )[4] -> #1

      pchar( TVarData( Message ).VString )[5..11] -> #0

      pchar( TVarData( Message ).VString )[12] -> 'à' (#224)

      pchar( TVarData( Message ).VString )[13] -> #24

      pchar( TVarData( Message ).VString )[14] -> #21

      pchar( TVarData( Message ).VString )[15] -> #0

      pchar( TVarData( Message ).VString )[16] -> #16

      Damit kann ich keinen vernünftigen Text erkennen. Leider kann ich der 3-Party Dokumentation auch nicht entnehmen, um welche 16 Zeichen es sich in diesem Message-String handeln soll. Und warum meldet D5 nicht unbekannter Typ 8209?

      Besten Dank für Deine Hilfe.

      Gruss
      Christoph Schneide
      Schneider Infosystems AG, Schweiz

      http://www.schneider-infosys.ch

      Comment


      • #4
        Hallo,

        um zu prüfen, ob sich Delphi 5 beim Import der Typbibliothek irrt, würde ich an Ihrer Stelle die Typbibliothek mit dem Microsoft-Tool <b>OLE Object Viewer</b> (OleView) aus dem Platform SDK (oder von der CDROM zu meinem <i>COM/DCOM/COM+ mit Delphi</i>-Buch) untersuchen. Wie sieht diese Interface-Beschreibung in der IDL-Syntax aus, die von OleView angezeigt wird?

        Eventuell werden die Daten als <b>PSafeArray</b> übergeben. In dem o.g. Buch kümmern sich die Seiten 346...355 um die Besonderheiten in diesem Fall

        Comment


        • #5
          Hallo

          Der OleView zeigt für diesen Parameter folgenden Typ:

          MessageRcv( ... , VARIANT* Message , ... )

          Delphi übersetzt dies in

          MessageRcv( ... ; var Message : OleVariant; ... )

          Der ActiveX Import von Delphi übersetzt doch hier den Pointer korrekt in ein Var?
          Wäre es ein PSafeArray, dann hätte doch folgende Umwandlung einen Erfolg zeigen müssen?

          MessageRcv( ... , var Message : OleVariant; Length : integer; ... )<br>
          var p : pointer; c : array [0..99] of char;<br>
          begin<br>
          p := VarArrayLock( Message );<br>
          move( p^, c , Length );<br>
          VarArrayUnlock( Message );<br>

          Doch im char array c steht immer noch kein sinnvoller Text.

          Besten Dank

          Christoph Schneide
          Schneider Infosystems AG, Schweiz

          http://www.schneider-infosys.ch

          Comment

          Working...
          X