May 252010

Update: DYMO Label software 8.3 has been released. See

Update 2: DYMO Label SDK 8.3.1 has been released. See

Please Note

This release is a BETA. It has not been extensively tested outside DYMO and should be used for developer testing only, NOT for production software releases.

What’s New

64-bit Support

Now you can use the SDK from 64-bit processes, e.g. Internet Explorer 64-bit. The only thing to do is to recompile your application to be 64-bit, no need to change any code.

New DYMO Label Framework API

Starting this introduces a new API – the DYMO Label Framework. It provides a simpler streamlined interface for printing labels.

Major Features

  • Support for 32-bit and 64-bit applications.
  • Support for Tape printers. Now you can use the same simple API to print on Tape printers as for printing on LabelWriter printers. All you need to do is to design a Tape label in DLS, load it in your application and print.
  • Native .NET support. The Framework provides native .NET support. There is no need to use COM-Interop anymore. Features available in .NET such as indexed properties, enumerators, etc are used to provide an API that is easier to use.
  • COM support. Microsoft COM is supported as well, similar to current SDK.
  • Consolidated High and Low Level API. The Framework combines the current high-level and low-level APIs into a single API. Now there is no need to switch between APIs if you need some advanced functionality not available in high-level API.
  • Cross-browser and cross-platform JavaScript library – see below.

DYMO Label Framework JavaScript Library

To simplify using DYMO Label SDK from web-based application we created a JavaScript library that abstracts browser and platform details for accessing DLS SDK from JavaScript. Now you can use the same JavaScript code to add printing support for any browser the SDK supports. Currently supported browsers are:

  • On Windows: Internet Explorer 6+, Firefox 2+, Chrome 4, Opera 10, Safari
  • On Mac: Safari 3+

Major Features

  • Simple cross-browser and cross-platform API
  • Ability to load and print a label from: a web server, the local file system, or construct on the fly in JavaScript
  • Ability to load images from the server or from local file system
  • Ability to print multiple labels at once

Samples are available on “DYMO Label Framework/Samples/JavaScript” subfolder of the root SDK installation folder. Extensive documentation is provided at the top of the DYMO.Label.Framework.js file.

SDK Installation

The SDK libraries are installed by the DYMO Label 8.2.3 installer. It installs BOTH the DLS SDK (32 and 64 bit) and the new DYMO Label Framework along with drivers and the DYMO Label application.

Windows DYMO Label v.8 Installer

SDK Installer (Documentation and Samples)

  57 Responses to “Announcing DYMO Label 8.2.3 SDK Beta Release”

  1. This is fantastic news! Working with COM interop is always a nightmare.

    A couple of questions and a suggestion:

    1. What’s the difference between Framework.GetPrinters() and Framework.GetLabelWriterPrinters()? Both return an IPrinters object and on my system return the same list of printers.
    2. The IPrinters object doesn’t seem to be terribly useful. Maybe GetPrinters and GetLabelWriterPrinters could return IDictionary. This would allow using some convenient properties of the IDictionary, such as Count, ContainsKey, etc. You’ve already got the enumerator and [] operator setup, which basically emulates a Dictionary anyway. This would also negate the need for GetPrinterByName.


    • 1. The difference between GetPrinters() and GetLabelWriterPrinters() is that the first returns all the printers supported by the Framework, including “tape” printers, like “DYMO LabelMANAGER PC II” or “”DYMO LabelMANAGER 450 “, while the second returns only “label writer” printers, like “DYMO LabelWriter 450”. Basically speaking, if your application works with die-cut labels only, you should use GetLabelWriterPrinters(). If your application can work with both due-cut and tape labels then you should use GetPrinters().

      2. We can think about implementing IDictionary, but IPrinters is designed to be as simple as possible. Most of IDictionary methods are not applied to IPrinters because IPrinters is a read-only collection. For ContainsKey you can use [] operator, like var printer = printers[“DYMO LabelWriter 450”]; for Count – LINQ’s Count() extension method, like var count = printers.Count();

      • Thanks for the quick response.

        1. Great!

        2. Read-only or not, forcing Linq usage is a bit inconvenient and slow. My knowledge of Linq’s internals isn’t complete, but won’t Count() force a complete enumeration of the list? That’s what I’m trying to avoid. Also, calling [] on a printer name that doesn’t exist throws an exception (slow!) whereas checking ContainsKey() is very fast.

        I realize that most people (including myself) aren’t using this in performance-sensitive situation, so maybe that’s not an issue. In the interest of simplicity, doesn’t it make sense to use standard C# types paradigms instead of rolling your own, though?

        Maybe ReadOnlyCollection would be a better fit (although, it doesn’t provide easy searching capabilities):

        StackOverflow has some suggestions on read-only dictionaries:

        We ended up using this one in our applications:


        • ReadOnlyCollection is still ICollection and IList, so a lot of operations are not applied, through it is better then IDictionary :) LINQ’s Count() might be slower then IList.Count for large collections, but for the printers you will not have more then one or two usually, so there is no difference. What is your use case for using Count?

          As for ContainsKey(), I agree, there should be a method/property to check printer without throwing exception.

          Anyway, thanks for trying the Framework and the good feedback.

      • The use case is simply populating a list, so you’re right, .Count() is certainly fast enough. It just seems like you’d already be keeping a count, so why call a method? We do a lot of work with 8-bit micros, so performance is always on my mind even when it really doesn’t matter :).

        If you don’t want to add another method, ContainsKey() could be avoided by simply returning null from the [] operator if the element isn’t found, but that’s not terribly standard behavior for [].

        We’re really happy with the new SDK, it’s gotten rid of the last bit of COM interop in our applications.

        • When designing IPrinters we were thinking about two base use cases:

          • IPrinters is used to populate printer names list in UI. The selected name might be then saved in preferences or used directly to get IPrinter to perform printing. That is [] for.
          • Enumerating available printers to select one suitable for printing, based on some conditions. It might be pretty arbitrary, so IEnumerable is good enough in this case, especially if LINQ is used on top.

          Returning null instead of throwing exception is not very good. We will add something like bool Contains(string printerName)

      • I don’t know that I’d go quite so far as the guy in the linked article on null, but I agree it’s not the optimal solution.

        Thanks for your insights.

  2. It looks like WordPress stripped out some markup. The comment above about returning IDictionary should read: IDictionary<string, IPrinter>.

  3. One other item that came up while testing this out:

    Interop.DYMOBarcodeLib.dll has a dependence on stdole.dll. This is typically installed with MS Office, but our production systems don’t have Office installed, so we get errors during ClickOnce deployment.

    These threads suggest that it may be added automatically when it’s not totally necessary, although I’m guessing your Office integration is the reason for the dependence.

    • Actually, I see that we might be able to get around this by including the dll in our ClickOnce deployment.

    • DYMOBarcode.dll uses IFont that in .NET world is defined in stdole.dll. Just include it into your installer.

      • With ClickOnce it’s a bit trickier, especially since we use an intermediate assembly to wrap some of the Dymo functionality. Adding a reference to stdole in each project and then setting it to copy local fixed the issue.


  4. How to install this beta under windows XP?
    Installer says that it needs at least XP SP2, but I have XP SP3

  5. It’s not so easy, because installer says that I don’t have required windows version.
    I think it’s a mistake in installer params or in windows version testing.

    • Which version of DLS 8 did you install?

      Run the regedit tool and navigate to the following key:
      HKLMSOFTWAREMicrosoftWindows NTCurrentVersion
      Look at the following String value:

      If it does not read “Service Pack 3”, please state what you find there. Modifying the value should alleviate the problem.

  6. It works
    There was almost the same value, but in polish: “Dodatek Service Pack 3” (Service Pack 3 addon)

  7. I’m working on some web application software that deals with scanning barcodes and having a label print as each barcode is scanned. What I was wondering is if this sdk would allow the web software to print labels without having to deal with the print dialogue box everytime a label needs to be printed.

  8. What are your plans for Firefox support on Mac OS X? We have both Mac and PC users and have standardized on Firefox. I can’t switch my Mac users to Safari at this time.

    Will there be support for 8.2.3 beta on Mac? Why not release both at the same time?


    • Unfortunately, there are no immediate plans to support Firefox on Mac, this might change in the future though.

      • That’s unfortunate, since your Safari plug-in works so well with the “framework” api. I’ll have to think of a new non-Dymo solution.

  9. I’d like to see visual studio style intellisense for jscript framework file. It is not very time consuming and would make using the framework even easier when using it in mvc and web forms.

    Just a though,


  10. We have an internal webservice, part of which prints shipping labels. The current version, on a 2003 server, uses the old v7 software and works fine. We’ve built a new 2008R2 (64-bit) server that we’re going to move the intranet over to and had issues getting the v7 components to work so we thought to try this v8 beta. We have a couple of issues:

    1) Running as a 64-bit site doesn’t seem to work. DYMO.Label.Framework has a reference to PresentationCore and it or one of its dependencies isn’t loading, “Could not load file or assembly ‘PresentationCore’ or one of its dependencies. An attempt was made to load a program with an incorrect format.” This happened on my 64-bit win7 dev box as well as the 2008r2 64-bit production box. Switching the app pool to 32-bit works just fine and is what we’re doing. I just wanted to mention this as it doesn’t appear to be 64-bit compatible out of the box.

    2) Still requirs dcom permissions? On the old 2003 box, we had to give the NETWORK SERVICE identity dcom permissions to get the dymo v7 component to work from On the 2008r2 64-bit (32-bit app pool) server, the v8 beta framework gives an error when trying to print, “DYMO.DLS.Runtime.DlsRuntimeException: Printing Error: PrintTicket provider failed to bind to printer. Win32 error: Access is denied.” and the system event log has “The machine-default permission settings do not grant Local Activation permission for the COM Server application with CLSID {BA7C0D29-81CA-4901-B450-634E20BB8C34} and APPID {AA0B85DA-FDDF-4272-8D1D-FF9B966D75B0} to the user IIS APPPOOLWebServices SID (S-1-5-…) from address LocalHost (Using LRPC). This security permission can be modified using the Component Services administrative tool.”

    {BA7C0D29-81CA-4901-B450-634E20BB8C34} is CPrintTicket WoW Services, but I couldn’t find it in dcom config. I did find {AA0B85DA-FDDF-4272-8D1D-FF9B966D75B0}, but I coudldn’t edit the permissions – the controls are greyed out. I gave the identity local Access, Launch and Activation dcom permissions on DYMOPrintingSupport and DymoUniversalAddin (just guessing when I chose to try those) and had no effect.

    I’m stuck. I don’t know where to go from here. I don’t know why it works on my local dev box, but not on the production box. It’s not permissions on the printer itself. Any help would be appreciated.

    • Couple of notes:

      • PresentationCore – it is a .NET system library. Make sure you have installed .NET 3.5 SP1 on the server
      • for ASP.NET we usually recommend to impersonate IIS page/application, like
        <identity impersonate="true" userName="domainusername" password="password"/>

        See for more information

      • though the new API is written in C#, there are two COM libraries it still uses. Its are DYMOPrintingSupport and DYMOBarcode. If you are using dcom config – grant access rights to these libraries
      • make sure you have stdole.dll installed on the server either in GAC or in the same folder as other Framework dlls. stdole.dll is NOT copied by VisualStudio by default into output folders. stdole.dll is used by interop dll generated for DYMOBarcode.dll
      • make sure you have DYMO Label software beta version installed on the server – it installs and registers COM libraries used by the Framework
      • Thanks for replying.

        .NET 3.5 SP1 is installed on both boxes. Even though win7 and 2008r2 come with it, I double-checked just to be sure. Both boxes have 3.5.30729.4926 installed.

        I did try doing the impersonation in the web.config, but app pool identities don’t have passwords, per se, and ASP.NET choked on the web.config (unknown username or bad password). With the site using anonymous authentication and disabled impersonation, it should run as the app pool identity as if I had set the impersonation in the web.config. I verified by including System.Security.Principal.WindowsIdentity.GetCurrent().Name in the exception message.

        I would prefer not to mess with dcom permissions at all. We had to do it for v7 but was hoping this “native” .net framework would not use com. What do we need to do so we don’t need to give dcom permissions?

        Thanks for the stdole.dll tip. Indeed, VS did not copy it, but the file is in the GAC on both my local dev box and the production server.

        DYMO software is installed on both local dev box and production server.

        I found when the platform target in VS is set to Any CPU, it copies PresentationCore.dll and System.Printing.dll to the bin folder when built. When set to x86 or x64, it does not. When I got the error above (about the incorrect format), it was when I had target set to Any CPU. When I deleted those two .dll files, the error went away.

      • I discovered the reason why the dcom security controls were disabled for {AA0B85DA-FDDF-4272-8D1D-FF9B966D75B0}. The registry key for it, HKCRAppID{AA0B85DA-FDDF-4272-8D1D-FF9B966D75B0}, is owned by TrustedInstaller and the administrators group has read-only access. By changing the owner to the administrators group and giving full control to the administrators group, I was then able to edit dcom permissions. Giving local permissions to the app pool identity worked. The webservice is now printing labels.

        I would still like to know how we can get around having to set dcom permissions (without having to use an admin-level identity). I mean, I get the impression it’s not normal to have to set dcom permissions so I’m curious what others are doing so they don’t have to.

  11. The new framework is great and seems to work from my machine, printing to network printers via a windows form.

    However, when I use *exactly* the same code on the same machine on a Windows Service, I get the following error message:

    “System.InvalidOperationException: Printer ‘\COMP108Dymo (Despatch)’ is not found
    at DYMO.Label.Framework.Printers.GetPrinterByName(String printerName)
    at DymoService.DymoService.tDymoCheckTick(Object source, ElapsedEventArgs e) in E:FileLibraryfilelibraryDymoServiceDymoService.cs:line 68”

    I am running the service under the domain administrator credentials.

    Would anyone know why this is happening?


    • For the network printers the Framework will only enumerates printers to which the user has made previous connections. So, login on the server with the domain administrator credentials, make sure you can print a test page to the desired printer; restart the service; now you should see the printer.

    • I am just curious, what is the use case for printing in your application? I mean why do you print to a network printer from the server? Is it possible to print from the computer there the printer is connected?

      • Thanks I’ll give that a try. It’s an ASP.Net application. We need to be able to print barcodes to the printers over the web from any client computer.
        The user prints a barcode from a webpage: that request is logged in a db and the Dymo service picks that request up and sends it to the relevant printer.

      • Vladimir we cannot use the java framework as that requires all clients to have the software installed.

        At the moment I am using a windows form to print to network printers using the new framework but this only seems to find the printer once every two or three tries. Completely impossible to use.

        We keep receiving the error:

        System.InvalidOperationException: Printer ‘\COMP108Dymo (Despatch)’ is not found at DYMO.Label.Framework.Printers.GetPrinterByName(String printerName) at DymoService.DymoService.tDymoCheckTick(Object source, ElapsedEventArgs e) in E:FileLibraryfilelibraryDymoServiceDymoService.cs:line 68

        We try again and it prints. Looks like we will have to move to some other solution now as we have hit a brick wall.

        • Sorry you have troubles. Could you try to run DbgView to collect log messages? This can help to find the source of the problem/bug. Also, maybe you can provide the sources for how you call the Framework classes? E.g. why do you call GetPrinterByName() from a Timer event?

  12. I am now using the .net Framework.

    It can iterate through local printers (not networked) and lists them on my page.

    I use the following code to print:

    ILabel label = DYMO.Label.Framework.Label.Open(@”C:standard.label”);
    label.SetObjectText(“BARCODE”, “12345”);

    This throws the error: “External component has thrown an exception”

    Debug view gives the following:

    Utils.CreateLabelPrintParams(): printParams == null, creating default printParams based on printer type

    I have a class named utils (I hope this isn’t causing the problems?)


  13. OK, this is my 2nd Dymo Labelwriter 450. First one would work. Sent it back. Received my new one and the power won’t come on although it’s plugged in, and the usb is plugged in. I have windows xp, sp3. Grrr…I’m wondering if another program is affecting it but the fact that it won’t turn on is iffy.

    • Make sure to plug the power cable comletely from the printer side. Sometimes you can think it is connected while it is not. Push it as hard as you can :)

  14. I am wanting to use the Framework in my application for the soul purpose of autoselecting the installed label printer if installed and everything works fine on the development but on a test machine I am getting an error because the DynoPrintingSupport.dll is missing. I am assuming that this only gets install with the label software and not with the driver. I would rather not have to install the label software on every machine I install my software on as not everyone will have a label printer and the software is never used on the ones that do. Is there a way I can distribute this dll with my application?

    • Yes, it is possible to use the Framework without installing DYMO Label software but we DON’T recommend nor support that. First of all, DYMO Label installer installs drivers and without drivers the printers will not work anyway. Next, it installs support utilities that are helpful in case of some troubleshooting has to be done. Anyway you can use following steps to install the Framework with your application (assuming you application is .NET) :

      • include all the Framework assemblies. You can find them in the bin folder after you build your project
      • include stdole.dll
      • include DYMOPrintingSupport.dll You can find 32-bit version in DYMO Label installation folder; 64-bit version is in ‘x64’ subfolder
      • include DYMOBarcode.dll You can find 32-bit version in DYMO Label installation folder; 64-bit version is in ‘x64’ subfolder
      • modify/create a manifest file for your application to include reference to DYMOPrintingSupport/DYMOBarcode. For an example see the DYMO Label’s manifest file. Please note, that the manifest file for DYMO Label uses 32-bit only versions of the dlls, because DYMO Label itself runs as 32-bit app. If your application can run as 64-bit an 64-bit version of Windows, your installer should handle which manifest file/dlls to install
  15. Hi!

    I have a an MS 2007 Access program that was running under XP Pro to print labels and bar codes on a LabelWriter Duo. The VB code used a COM construct (from your SDK, downloaded > 2 yrs. ago) that looked at some registry keys to find the location of the Dymo label file directory.

    All was right with the world until I moved up to Windows 7 Ultimate 64-bit. Now my VB code chokes on not finding the registry keys to tell me where the label directory is. This construct MUST work since the Access application may be run an any number of PCs and the label file location could be different on each PC. I do not want to build a unique load for each PC, especially since our sys admin often does things without my knowledge.

    Please give me a solution to this problem that works with VB code in Access 2007 (actually, now it is the 2010 version). I am using solely the VB compiler within MS Access and I have no knowledge of any .NET programming, nor do I have any tools for such. I looked at the latest SDK docs from your website today, but there seems to be a distinct lack of info for VB folks that just do their programming in Access.

    Thanks very much for your help!


  16. I need help. I can get a label to print when using the aspnet web server, but when I run the app in IIS 7, I get
    “External component has thrown an exception.”
    at DYMOPrintingSupportLib.IPrinter.get_BasicPapers()
    at DYMO.DLS.Runtime.Printer.InitDieCutPapers(IPrinter printer)
    at DYMO.DLS.Runtime.DieCutLabelPrintLoop.ValidateVisitor.VisitLabelWriterPrinter(LabelWriterPrinter printer)
    at DYMO.DLS.Runtime.LabelWriterPrinter.Visit(IPrinterVisitor visitor)
    at DYMO.DLS.Runtime.DieCutLabel.CreatePrintLoop(Printer printer, LabelPrintParams printParams)
    at DYMO.DLS.Runtime.Label.Print(Printer printer, LabelPrintParams printParams)
    at DYMO.Label.Framework.Label.Print(IPrinter printer, IPrintParams printParams, IEnumerable`1 textSet)
    at DYMO.Label.Framework.Label.Print(IPrinter printer)

    WinDbg shows “w3wp.exe Information: 0 : Utils.CreateLabelPrintParams(): printParams == null, creating default printParams based on printer type”

  17. I need help. I can get a label to print by using windows application but I made Website web server and when I run the app in IIS 7, I get nothing just thrown out again to the my application web page.
    Even I included all DYMO DLLs but still not supported..! and giving me error like below:
    Error 109 Could not load file or assembly ‘DYMO.Common, Version=, Culture=neutral, PublicKeyToken=5426002a38745af9’ or one of its dependencies. Failed to grant minimum permission requests. (Exception from HRESULT: 0x80131417)

    • Hi Yamini,

      It failed to load referenced dll file.
      It is mostly a problem with permission to access path where file is or it could be a problem with other referenced files “DYMO.Common” is using. Check Advanced settings in IIS manager.

  18. When I use in i am getting error:

    Server Error in ‘/’ Application.

    Creating an instance of the COM component with CLSID {09DAFAE2-8EB0-11D2-8E5D-00A02415E90F} from the IClassFactory failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

  19. Hi,
    I am using window based application in c#, and used DYMO Label Printer . As you have explain above all i have tried but getting the same error.

    Error Message: Creating an instance of the COM component with CLSID {09DAFAE2-8EB0-11D2-8E5D-00A02415E90F} from the IClassFactory failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
    Error Source: mscorlib
    Stack Trace …
    System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
    System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
    System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
    System.Activator.CreateInstance(Type type, Boolean nonPublic)
    System.Activator.CreateInstance(Type type)

    my code is written like below
    Dymo.DymoAddin odymoaddin = new Dymo.DymoAddIn();
    Dymo.DymoLabels odymolabel = new Dymo.DymoLabels

    • Hi Nitin,

      Do you have DYMO Label Software installed on your machine? This is a requirement for all DYMO SDK applications to run.

  20. If I try to open below link to print barcode and click on Invoke button then getting below error.


    System.TypeInitializationException: The type initializer for 'WebServicePrinterApplication.ServicePrinter' threw an exception. —> System.Runtime.InteropServices.COMException: Creating an instance of the COM component with CLSID {09DAFAE2-8EB0-11D2-8E5D-00A02415E90F} from the IClassFactory failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
    at WebServicePrinterApplication.ServicePrinter..cctor()
    — End of inner exception stack trace —
    at WebServicePrinterApplication.ServicePrinter.Print(Int32 printerid, Int32 labeltemplateid, Int32 copies, String parameters)

  21. I have built a C# Windows Forms application that runs beautifully on all the desktop computers in the office, but once it was placed on the remote desktop environment where it needs to run in order to access the database, I get this error:

    DYMO.DLS.Runtime.DlsRuntimeException: Unable to load label template ‘C:\Users\castevens\Documents\DYMO Label\Labels\Address2up-SOME TEXT.label’ —> DYMO.DLS.Runtime.DlsRuntimeException: 0, 0: The element ‘DieCutLabel’ has invalid child element ‘IsOutlined’. List of possible elements expected: ‘PaperName, CustomPaper’. —> System.Xml.Schema.XmlSchemaValidationException: The element ‘DieCutLabel’ has invalid child element ‘IsOutlined’. List of possible elements expected: ‘PaperName, CustomPaper’.

    We have installed the latest version of the DYMO Label Software and are able to print labels from there. Your assistance is greatly appreciated.

    • Based on the exception you are receiving it appears that your label file is either missing or corrupt. Does the file exist? Can you try using a different file to see if you have the same issue?

      • I don’t mean to resurrect an old thread but I am having this issue as well. I’ve tried using different .label files and layouts and still haven’t had luck. I have edited the XML file to remove the field in question and then it brings up another error about HueScale. I’m confused on why this is occuring when I have the framework referenced correctly and the .label file is in the correct folders. Thanks

        • It sounds like a version mismatch issue. Make sure you have the latest version of DLS installed on your machine.


    • I was able to fix this problem by editing the XXXX.label file directly with notepad and Deleting these XML line items from the file.


      and removing all instances of:


      In my label file all of these setting were False or -1, which I believe are defaults, so my label printed fine without them.


      • All my XLM comments were removed by this editor so my original comment is missing the XML items below:



Leave a Reply to Vladimir Cancel reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>