Announcement

Collapse
No announcement yet.

Verweis auf byte[] als ref byte übergeben

Collapse
This topic is closed.
X
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Verweis auf byte[] als ref byte übergeben

    Hallo zusammen,

    ich muss in meiner C#- Application verschiedene COM-Schnittstellen verwenden, unter anderem auch eine Methode, die als Argumenten ref byte und ref uint ewartet, also

    Code:
    writeToStream(ref byte Stream, ref uint pSize)
    IDL der Methode heißt
    Code:
    HRESULT WriteToStream([in] byte *Stream, [in,out] UINT* pSize);
    Dabei heißt es in der Doku, dass Stream ein byte array ist, in welches die Daten dann geschrieben werden.

    Die Frage ist also, wie bekomme ich ref byte aus einem byte[] ?

    Danke für die Hilfe!

  • #2
    C#??
    Warum postest du es dann nicht dort??

    ->verschoben
    Christian

    Comment


    • #3
      Wo kommt denn das her?

      Code:
      writeToStream(ref byte Stream, ref uint pSize)
      Das wäre ja nur ein Zeiger auf EIN Byte. Vielleicht wäre ref byte[] richtiger? In C gibt es keinen Unterschied zwischen einer Referenz und einem Array.

      byte * meineBytes

      is also genau das Gleiche wie

      byte[] meineBytes

      Daher stammt wohl auch die Schreibweise. In C# ist aber eine Referenz (ref) auf ein byte nicht das gleiche wie eine Referenz auf ein Byte Array.

      Aber ich bin mir natürlich auch nicht sicher ob das der Lösung dienlich ist. Hab mit COM noch nichts gemacht.Ich könnt mir allerdings vorstellen dass es irgendwie in die Richtung geht.

      Comment


      • #4
        Originally posted by Christian Marquardt View Post
        C#??
        Warum postest du es dann nicht dort??

        ->verschoben
        Hm, ich habe in COM-Forum gepostet genau deswegen, weil im C#-Forum nur wenige Ahnung vom COM haben.

        Vielleicht wäre ref byte[] richtiger?
        Ich kann die Methodensignatur leider nicht ändern, sie ist mir vorgeschrieben. Muss also irgendwie ref byte bekommen

        Comment


        • #5
          Hm, ich habe in COM-Forum gepostet genau deswegen,
          Mir ist unklar warum eine Baumstruktur in einem Forum unverständlich ist.

          C++ -> COM

          heisst im C++ Thread -> dort Probleme die COM betreffen i.V.m C++


          weil im C#-Forum nur wenige Ahnung vom COM haben.
          Erstaunliche Erkenntnis, dafür dass du wenige Stunden hier online bist...Wahrscheinlich jahrelang ohne anmeldung mitgelesen....
          Christian

          Comment


          • #6
            Ok, mein Problem betrifft sowohl C++ und COM, als auch C#


            Das:

            Originally posted by fanderlf View Post
            Hab mit COM noch nichts gemacht
            sehe ich nicht zum ersten mal in einem C#-Forum. Nicht unbedingt nur in diesem.

            Ich werde mich aber riesig freuen und dankbar sein, falls jemand in diesem Forum die Lösung hat

            Comment


            • #7
              Du kannst ja mal sowas versuchen:

              [highlight=c#]
              var stream = new Byte[] { 0x00, 0x01, 0x02 };
              var size = stream.Length;

              writeToStream(ref stream[0], ref size)
              [/highlight]

              Comment


              • #8
                Muss man da überhaupt was tun?

                Ich hätte erwartet das wenn du dir für die COM Schnittstelle ein Interop Assembly generieren lässt da einfach ein Byte[] rein gefüllt werden kann(möglicherweise mußt du das Byte Array erst einem Objekct zuweisen und das in die Schnittstelle füllen). Der Rest ist Marshalling Magie der Interop Assembly(genau dafür ist die ja letztlich da).

                Aber da du dich hier meldest hast du das wahrscheinlich bereits probiert und es hat geknallt? Oder? Wenn ja könntest du dir den generierten Code der Interop Assembly mal mit dem Reflector ansehen und den entscheidenden Code hier posten?

                Comment


                • #9
                  Hier gibts glaub ich einen guten Start zum Thema COM Interop. Hat mich grad interessiert Werd das auch mal nachlesen.

                  Comment


                  • #10
                    @fanderlf: Die selbe Assembly wie mit tlbimp erhältst du auch einfach aus Visual Studio heraus wenn du die COM Komponente über den 'Add Reference'-Dialog auswählst.

                    Comment


                    • #11
                      ah OK wieder was dazu gelernt Ich hab mal versucht mit Visual Studio eine COM Komponente zu erzeugen die ich in Borland C++ verwenden kann. War aber leider nicht erfolgreich. Habs dann mit einer normalen C++ Dll gemacht.

                      Comment


                      • #12
                        Vielen Dank für Eure Antworten!

                        Originally posted by fanderlf
                        Du kannst ja mal sowas versuchen:
                        Das habe ich auch versucht. ES wird zwar keine Fehlermeldung zurückgegeben, array bleibt aber unverändert und wird von der Methode mit keinen neuen Daten aufgefüllt.

                        Originally posted by Ralf Jansen View Post
                        wenn du dir für die COM Schnittstelle ein Interop Assembly generieren lässt
                        Ich muss hier keine Interop Assembly generieren, sie ist schon für mich fertiggestellt, und zwar mit der "ref byte"-Signatur.


                        Originally posted by Ralf Jansen View Post
                        Aber da du dich hier meldest hast du das wahrscheinlich bereits probiert und es hat geknallt? Oder? Wenn ja könntest du dir den generierten Code der Interop Assembly mal mit dem Reflector ansehen und den entscheidenden Code hier posten?
                        Hm, habe noch nie was mit dem Reflector gemacht. Was ist hier genau gemeint?

                        Comment


                        • #13
                          Reflector ist ein Bytecode Dissambler. Wenn du dir die generierte WriteToStream der Interop Assembly im Reflector ansiehst wäre mehr als nur die Methodensignatur zu sehen. Also nicht nur ref byte blah ... sondern auch die Attributierung wie der Typ konkret gemarshallt wird. Ich hatte die Hoffnung das man da noch was draus lesen könnte.

                          Ich hätte übrigens mit einer generierten Signatur entsprechend diesem Post gerechnet und dann auch eine entsprechende Lösung vorgeschlagen.

                          Comment


                          • #14
                            Thema geschlossen.

                            Crosspost

                            Comment

                            Working...
                            X