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
