Avatar billede apocryphal Nybegynder
18. juli 2003 - 21:43 Der er 1 kommentar og
1 løsning

Interop med COM - QueryInterface

Hey...

Jeg forsøger at printe nogle labels på min Dymo Labelwriter, fra et C# program med hjælp fra de COM / OLE sager, Dymo har tilgængeligt på deres website.

Dette er mit program:
using System;
using System.Runtime.InteropServices;

namespace LabelTester
{
    class LabelTester
    {
        [STAThread]
        static void Main(string[] args)
        {
            Dymo.ILabelEngine engine = new Dymo.LabelEngineClass();

            engine.OpenFile(@"C:\Programmer\Dymo Label\Label Files\Barcode Label.LWT");
            int barcodeId = engine.PrintObject().FindObj("BARCODE");
            int bookId = engine.PrintObject().FindObj("BOOKTITLE");

            //engine.PrintLabel("DYMO LabelWriter 330 Turbo-USB", "USB001", 1, false);
        }
    }
}

Her er jeg gået i stå.

For at jeg kan tilføje data til min labels BARCODE element, skal jeg indlæse et objekt af typen IBarCodeObj. IBarCodeObj implementere, så vidt jeg kan forstå af manualen, Interfacet ILabelObject. (Hvad disse Interfaces egentlig implementere, tror jeg ikke er vigtigt for at besvare mit spørgsmål...). Problemet er. For at jeg kan få et IBarCodeObj ud fra det ID nummer jeg har som int barcodeId, skal jeg noget i stilen af:

Dymo.BarCodeObj barcode = (Dymo.BarCodeObj)engine.PrintObject().LabelObject(barcodeId);

Men dette cast kan jeg naturligvis ikke lave, da det er unmanaged code - og alt det sjov (hvis jeg prøver, får jeg en NullPointerException). I manualen står der så, at jeg skal bruge ILabelObject's QueryInterace-metode...

Now, hvad jeg har kunnet forstå, er QueryInterface-metoden en måde at caste ting rundt på, når det er unamanged code - men, jeg har ingen idé om, hvordan pokker jeg skal betjene Marshal.QueryInterface()-metoden.

Nogle der kan hjælpe med denne issue?

Dette er jo egentlig en .NET sag, men jeg skriver i C#, så jeg satser på dette forum.

--
Jonas
Avatar billede z42cool Nybegynder
21. juli 2003 - 07:24 #1
Præcis det cast som du prøver på er ganske lovligt. Din null pointer exception har intet med castet at gøre, men skyldes blot at "engine.PrintObject().LabelObject(barcodeId);" returnerer null der naturligvis ikke kan castes. QueryInterface har du ikke brug for i managed kode, idet det blot er COM måden at få fat på interfaces på. Hvis du har fat i en klasse kan du frit explicit caste den til et hvilket som helst interface den implementerer.
Avatar billede apocryphal Nybegynder
04. august 2003 - 19:55 #2
Jeg lukker spørgsmålet, jeg har fundet en anden løsning på problemet...

--
Jonas
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester