Alert.png

Notice: This page contains information for the legacy Phidget21 Library.

Phidget21 is out of support. Bugfixes may be considered on a case by case basis.

Phidget21 does not support VINT Phidgets, or new USB Phidgets released after 2020. We maintain a selection of legacy devices for sale that are supported in Phidget21.

We recommend that new projects be developed against the Phidget22 Library.


Click on the 2phidget22.jpg button in the menu bar to go to the Phidget22 version of this page.

Alert.png

Language - Adobe Director: Difference between revisions

From Phidgets Legacy Support
No edit summary
No edit summary
 
(58 intermediate revisions by 5 users not shown)
Line 1: Line 1:
Preamble about the language and its general strengths and weaknesses.
[[Category:Language]]
{{OSLang|[[File:icon-Adobe_Director.png|64x64px|link=|alt=]]|Adobe Director, developed by [http://www.adobe.com Adobe Systems] is a tool used to build interactive and multimedia applications.}}
__TOC__


==Support==
==Introduction==
Adobe Director has a complete API for all Phidgets devices, and code samples for PhidgetInterfaceKit devices.


For a complete list of our supported languages and their support status, [[Levels of Support|click here]].
{{LanguageSupport|Adobe Director|the complete Phidget API, including events|the PhidgetInterfaceKit devices.|Windows.|}}


* Our honest opinion on how well this language is suited to controlling Phidgets. If it is a poor choice, suggest and link similar (better) languages.
==Quick Downloads==
 
{{QuickDownloads|Adobe Director|
{{APIQuickDownloads|{{SERVER}}/documentation/COM_API_Manual.pdf}}|
{{ExampleQuickDownloads|{{SERVER}}/downloads/phidget21/examples/com/AdobeDirector.zip|}}|
{{ExtraLibraryQuickDownloads|{{SERVER}}/downloads/phidget21/libraries/windows/Phidget21-windevel.zip|COM|}}
{{WindowsQuickDownloads}}}}
 
==Getting started with Adobe Director==
 
If you are new to writing code for Phidgets, we recommend starting by running, then modifying existing examples. This will allow you to:
{{ExampleCodeReasons}}
 
The only operating system we support with Adobe Director is [[#Windows (2000/XP/Vista/7)|Windows (2000/XP/Vista/7)]].
 
==Windows (XP/Vista/7/8)==
 
===Description of Library Files===
Adobe Director programs on Windows depend on the following:
* <b>{{Code|phidget21.dll}}</b> contains the actual Phidget library, which is used at run-time.  By default, it is placed in {{Code|C:\Windows\System32}}. The installers in the [[#Libraries and Drivers | Quick Downloads]] section put this file into your system.
* <b>{{Code|Phidget21COM.dll}}</b> is the Component Object Model (COM) library and provides your project access to the Phidget ActiveX objects. This is part of our [{{SERVER}}/downloads/phidget21/libraries/windows/Phidget21-windevel.zip COM Library]. If you installed the Phidget drivers, it will have automatically registered the ActiveX objects into your system. If you are manually installing this file, you must register it through command line by running: {{Code|regsvr32 Phidget21COM.dll}}.
 
If you do not want to use our installer, you can download both [{{SERVER}}/downloads/phidget21/libraries/windows/Phidget21-windevel.zip files] and manually install them where you want; refer to our [[OS_-_Windows#Manual_File_Installation| Manual Installation Instructions]].
 
===Adobe Director 11.5===
 
====Use Our Examples====


* In this section, list any restrictions or limitations that this particular language may impose. For example, incompatibility with certain operating systems.
1. Download the [{{SERVER}}/downloads/phidget21/examples/com/AdobeDirector.zip examples] and unpack them into a folder.  These examples were written in Adobe Director 11.5.  


==Development Environments and Compilers==
2. The easiest way to confirm that your environment is set up properly will be to run the HelloWorld Adobe Director example. In the Adobe Director environment, open up the file named {{Code|HelloWorld.dir}}.


Describe each major compiler and notable differences or important information. (eg. framework versions) If there are known issues/workarounds mention them and link to the corresponding issue at the bottom of the page.  
3. To run the example, click on Control &rarr; Play.  


==Quick Downloads==
[[File:AdobeDirector Play.PNG|link=|alt=Play]]
Before you can run your program, you need to set up the proper environment and get the necessary files off the Phidgets website.  
 
Visit the drivers section at www.phidgets.com and get the latest:
4. This program will detect for devices that are attached/detached on the computer. Go ahead, and attach or detach your devices! Here is an example output:
* [http://www.phidgets.com/drivers.php Phidget Framework]
 
You will need the Phidget Framework to use and to program with Phidgets. We also recommend that you download the following reference materials:
[[File:AdobeDirector HelloWorld Output.PNG|link=|alt=HelloWorld Output]]
* [http://www.phidgets.com/documentation/COM_API_Manual.pdf API Manual]
 
* [http://www.phidgets.com/downloads/examples/AdobeDirector_2.1.8.20110615.zip Adobe Director sample code]
After confirming that the {{Code|HelloWorld}} example is working, you can proceed to run the example for your device. Currently, the only device we have example code for is the PhidgetInterfaceKit.
* You can find a high level discussion about programming with Phidgets in general on the [[General API]] page.  
 
* The [[Device Functionality]] page explains the general operational information for your device.  
Once you have the Adobe Director examples running, we have a teaching section below to help you follow them.
 
====Write Your Own Code====
 
When you are building a project from scratch, or adding Phidget function calls to an existing project, you'll need to configure your environment to properly link the Phidget ActiveX object.
 
1. Create a new movie.  
 
2. Navigate to Insert &rarr; Control &rarr; ActiveX.  
 
[[File:AdobeDirector Add ActiveX 1.PNG |link=|alt=Add ActiveX Control]]
 
3. Select the ActiveX control that corresponds to your device. Select {{Code|OK}}.
 
[[File:AdobeDirector Add ActiveX 2.PNG |link=|alt=Add ActiveX Control]]
 
4. A window will pop up listing the properties and methods of the ActiveX class. Select {{Code|OK}}.
 
[[File:AdobeDirector Class ActiveX Properties.PNG |link=|alt=ActiveX Properties]]
 
5. The ActiveX class will be added to your cast. Create an instance of it by dragging and dropping the cast member onto the stage.
 
[[File:AdobeDirector ActiveX Cast.PNG ‎|link=|alt=ActiveX Cast]]
 
The project now has access to the Phidget function calls and you are ready to begin coding.
 
The same [[#Follow the Examples|teaching ]] section which describes the examples also has further resources for programming your Phidget.


You may want to have these pages open while working through these instructions.
==Follow the Examples==


==Getting Started==
By following the instructions for your operating system and compiler above, you probably now have a working example and want to understand it better so you can change it to do what you want.  This teaching section has resources for you to learn from the examples and write your own.


This tutorial was written for Adobe Director 11.5 in Lingo and assumes its use. Other versions of director should work as well, and each would be set up in a similar manner.
Your main reference for writing Adobe Director code will be our Adobe Director API information, with syntax for all of our functions:
First launch Director and generate a new movie file with a descriptive name such as PhidgetTest.
Next, insert an ActiveX control (Insert | Control | ActiveX...) and add the “PhidgetInterfaceKit Class”.


The Phidget object will be added to your cast, and you can then drag and drop it into the stage to create a sprite for it.
{{UsingAPhidgetInCodeGeneral|both of which are available in Adobe Director|[{{SERVER}}/documentation/COM_API_Manual.pdf COM API]}}
Add a field control to your movie (Insert | Control | Field) for the purpose of capturing some simple output, as well as a button (Insert | Control | Button) labelled “Open” to get things started.


[[Image:Getting_Started_Director.gif‎|border]]
===Example Flow===


===Coding For Your Phidget===
{{ExamplePseudocode|In Adobe Director, you catch these '''event''' functions using their specific names as shown below in the Code Snippets section.  The specific syntax for different events and which Phidgets you can catch which events for can be found in the [{{SERVER}}/documentation/COM_API_Manual.pdf COM API] manual.  Catching events by name hooks your event functions into the actual events when they occur. <br>
In the example code, some event functions are common to all Phidgets.  These are events such as '''OnAttach''' and '''OnDetach''', etc.<br><br>
Some event functions will be specific to each device, like when a tag is read on an RFID board, or when a sensor value changes on an Interface Kit.
|Creating a Phidget software object in Adobe Director is specific to the Phidget.  For a Phidget Spatial, for example, this would involve creating a {{Code|Spatial}} ActiveX object, as shown in the [[#Write Your Own Code|Write Your Own Code]] section above.  The examples show working instances of how to do this, and how to use other API functions.<br><br>
The object provides device specific methods and properties which are available from the API for your specific Phidget.|
[{{SERVER}}/documentation/COM_API_Manual.pdf COM API]}}


In this tutorial, the Phidget ActiveX object is assumed to be sprite 1 and the text field was given the member name “OutputField” to help distinguish it from the other objects.
===Code Snippets===
By double clicking an ActiveX object, Director will fully list its functionality.
In Lingo, you can apply the functionality for an object’s sprite through CallStrings.
The object name for any type of Phidget is also listed in the API manual.
Every type of Phidget also shares some functionality from the base Phidget class.


===Connecting to the Phidget===
Specific calls in Adobe Director will differ in syntax from those on the [[General Phidget Programming]] page, but the concepts stay the same. 


The program can try to connect to the Phidget through a call to open. Open will continuously try to connect to a Phidget, based on the parameters given, even trying to reconnect if it gets disconnected.
It may help to have the [[General Phidget Programming]] page and this section open at the same time, because they parallel each other and you can refer to the Adobe Director syntax. However, many additional concepts are covered on the General Phidget Programming page on a high level, such as using multiple Phidgets, handling errors, and different styles of programming.
This means that simply calling open does not guarantee you can use the Phidget immediately.  
We can account for a connection by using event driven programming and tracking the AttachEvents and DetachEvents, or by calling WaitForAttachment.
WaitForAttachment will block indefinitely until a connection is made to the Phidget, or an optional timeout is exceeded.
Here, the Phidget is opened on clicking the Open button inside the mouseUp event.
<div style="background-color: #f3f3f3; border-color: #1c9edb; border-width:1px; border-style: dashed;">
<font size="3">
<source lang=actionscript>
on mouseUp me
    sprite(1).CallString("Open()")
    sprite(1).CallString("WaitForAttachment(3000)")
end
</source>
</font>
</div>


The different parameters and open calls can be used to open the first Phidget of a type it can find, open based on a serial number, or even open across the network.  
For example, if we were using a [{{SERVER}}/products.php?product_id=1018 Phidget Interface Kit] as our device, the general calls would look like this:
The API manual lists all of the available modes that open provides.
One important thing to remember is that when working with Phidgets, a local connection will reserve the device until closed.
This prevents any other instances from retrieving data from the Phidget, including other programs.
The one connection per device limit does not apply when exclusively using the Phidget Webservice.
You can use CallString(“Close”) at any time outside of the Phidget’s own event handlers to close the connection.


===Event Driven Programming===
====Step One: Initialize and Open====


We recommend the use of event driven programming when working with Phidgets.
Your program can try to connect to the Phidget through a call to open. Open will continuously try to connect to a Phidget, based on the parameters given, even trying to reconnect if it gets disconnected. This means that simply calling open does not guarantee you can use the Phidget immediately.  Because we then have to also attach the Phidget within software after opening, in Adobe Director the Open step and the next step - [[#Step Two: Wait for Attachment (plugging in) of the Phidget|Attach]] - are often combined within one event trigger.  
This allows the program to execute other tasks until the Phidget fires a new event.  
In Adobe director, you can hook an event handler inside a script for the Phidget object with the following code:   


<div style="background-color: #f3f3f3; border-color: #1c9edb; border-width:1px; border-style: dashed;">
The different parameters and open calls can be used to open:
<font size="3">
* The first Phidget of a type it can find,
<source lang=actionscript>
* A Phidget based on a serial number, or even
* A Phidget across the network.


on OnSensorChange(Index, SensorValue) me
The [{{SERVER}}/documentation/COM_API_Manual.pdf COM API] manual lists all of the available modes that open provides. One important thing to remember is that when working with Phidgets, a local connection will reserve the device until closed. This prevents any other instances from retrieving data from the Phidget, including other programs. The one connection per device limit does not apply when exclusively using the [[Phidget WebService]].
      member("OutputField").text = string(Index) & ": " & string(SensorValue)
end


</source>
====Step Two: Wait for Attachment (plugging in) of the Phidget====
</font>
</div>


With this method, the code inside OnSensorChange will get executed every time the InterfaceKit reports a change on one of its analog inputs.
We can account for a connection by using event driven programming and tracking the AttachEvents and DetachEvents, or by calling WaitForAttachment as we show here.
Some events such as OnAttach and OnDetach belong to a base Phidget object and are common to all types of Phidgets.
Please refer to the API manual for a full list of events and their usage.  


===Working directly with the Phidget===
WaitForAttachment will block indefinitely until a connection is made to the Phidget, or an optional timeout is exceeded. Here, the Phidget is opened and then attached when on clicking the Open button inside a mouseUp event:
<div class=source>
<syntaxhighlight lang=text>
on mouseUp me
    sprite(1).CallString("Open()")
    sprite(1).CallString("WaitForAttachment(3000)")
end
</syntaxhighlight>
</div>


Some values can be directly read and set on the Phidget, and inside polling loops used as an alternative to event driven programming.
====Step Three: Do Things with the Phidget====
Simply use the CallString such as SensorValue(Index) or OutputState(Index, OutputState) for InterfaceKits.


<div style="background-color: #f3f3f3; border-color: #1c9edb; border-width:1px; border-style: dashed;">
We recommend the use of event driven programming when working with Phidgets in Adobe Director. This allows the program to execute other tasks until the Phidget fires a new event. In Adobe Director, you can hook an event handler inside a script for the Phidget object by catching the event by name with the following code:
<font size="3">
<source lang=actionscript>


sprite(1).CallString("OutputState(0,1)")
<div class=source>
<syntaxhighlight lang=text>
on OnSensorChange(Index, SensorValue) me
    member("OutputField").text = string(Index) & ": " & string(SensorValue)
end
</syntaxhighlight>
</div>
With this method, the code inside OnSensorChange will get executed every time the InterfaceKit reports a change on one of its analog inputs.  Please refer to the [{{SERVER}}/documentation/COM_API_Manual.pdf COM API] manual for a full list of events and their usage.


</source>
Some values can be directly read and set on the Phidget, and inside polling loops used as an alternative to event driven programming. Simply use the CallString method for obtaining data such as SensorValue(Index) or OutputState(Index, OutputState) for Interface Kits. For example:
</font>
<div class=source>
<syntaxhighlight lang=text>
sprite(1).CallString("OutputState(0,1)")
</syntaxhighlight>
</div>
</div>


===Working with multiple Phidgets===
Other events for different Phidgets can be found in the device's [[:Category:UserGuide|user guide]], and in the [{{SERVER}}/documentation/COM_API_Manual.pdf COM API] manual.
 
====Step Four: Close and Delete====


Multiple Phidgets of the same type can easily be run inside the same program.
You can use {{Code|CallString("Close")}} at any time outside of the Phidget's own event handlers to close the connection.
In our case, it requires another PhidgetInterfaceKit ActiveX object to be created and placed.
The new object can then be set up, opened and used in the same process as the previous one.
If the application needs to distinguish between the devices, open can be called with the serial number of a specific Phidget.


===Other Phidgets===
====Multiple Phidgets====


The design given in this document can also be followed for almost all Phidgets.  
Multiple Phidgets of the same type can easily be run inside the same Adobe Director program. This requires another PhidgetInterfaceKit ActiveX object to be created and placed. The new object can then be set up, opened and used in the same process as the previous one. If the application needs to distinguish between the devices, open can be called with the serial number of a specific Phidget.
For example, if you were using a PhidgetRFID instead of an Interfacekit, you would place a PhidgetRFID ActiveX object instead of a PhidgetInterfaceKit.  
The methods and events available would change but they can be accessed in a similar manner.


==Building your Project==
The complete set of functions you have available for all Phidgets can be found in the [{{SERVER}}/documentation/COM_API_Manual.pdf COM API].
Describe the different ways a project could be built using this language.


==Common Problems and Solutions/Workarounds==
==Common Problems and Solutions/Workarounds==
Here you can put various frequent problems and our recommended solutions.
 
===Windows users in The Netherlands===
 
A number of users in the Netherlands have reported issues with running our example code.  It is possible this is an issue related to the Dutch language pack used for Windows however, we do not currently really know why.  As we aren't able to run a Dutch version of Windows here, it is difficult to debug.  If you would like to help us work through the example code that we provide and help us figure out why, please [[Contact Us]].

Latest revision as of 18:54, 6 June 2017

Adobe Director, developed by Adobe Systems is a tool used to build interactive and multimedia applications.

Introduction

If this is your first time working with a Phidget, we suggest starting with the Getting Started page for your specific device. This can be found in the user guide for your device. That page will walk you through installing drivers and libraries for your operating system, and will then bring you back here to use Adobe Director specifically.

Adobe Director is capable of using the complete Phidget API, including events. We also provide example code in Adobe Director for the PhidgetInterfaceKit devices.

Adobe Director can be developed with Windows..

You can compare Adobe Director with our other supported languages.

Quick Downloads

Just need the Adobe Director documentation, drivers, libraries, and examples? Here they are:

Documentation

Example Code

Libraries and Drivers

Getting started with Adobe Director

If you are new to writing code for Phidgets, we recommend starting by running, then modifying existing examples. This will allow you to:

  • Make sure your libraries are properly linked
  • Go from source code to a test application as quickly as possible
  • Ensure your Phidget is hooked up properly

The only operating system we support with Adobe Director is Windows (2000/XP/Vista/7).

Windows (XP/Vista/7/8)

Description of Library Files

Adobe Director programs on Windows depend on the following:

  • phidget21.dll contains the actual Phidget library, which is used at run-time. By default, it is placed in C:\Windows\System32. The installers in the Quick Downloads section put this file into your system.
  • Phidget21COM.dll is the Component Object Model (COM) library and provides your project access to the Phidget ActiveX objects. This is part of our COM Library. If you installed the Phidget drivers, it will have automatically registered the ActiveX objects into your system. If you are manually installing this file, you must register it through command line by running: regsvr32 Phidget21COM.dll.

If you do not want to use our installer, you can download both files and manually install them where you want; refer to our Manual Installation Instructions.

Adobe Director 11.5

Use Our Examples

1. Download the examples and unpack them into a folder. These examples were written in Adobe Director 11.5.

2. The easiest way to confirm that your environment is set up properly will be to run the HelloWorld Adobe Director example. In the Adobe Director environment, open up the file named HelloWorld.dir.

3. To run the example, click on Control → Play.

Play

4. This program will detect for devices that are attached/detached on the computer. Go ahead, and attach or detach your devices! Here is an example output:

HelloWorld Output

After confirming that the HelloWorld example is working, you can proceed to run the example for your device. Currently, the only device we have example code for is the PhidgetInterfaceKit.

Once you have the Adobe Director examples running, we have a teaching section below to help you follow them.

Write Your Own Code

When you are building a project from scratch, or adding Phidget function calls to an existing project, you'll need to configure your environment to properly link the Phidget ActiveX object.

1. Create a new movie.

2. Navigate to Insert → Control → ActiveX.

Add ActiveX Control

3. Select the ActiveX control that corresponds to your device. Select OK.

Add ActiveX Control

4. A window will pop up listing the properties and methods of the ActiveX class. Select OK.

ActiveX Properties

5. The ActiveX class will be added to your cast. Create an instance of it by dragging and dropping the cast member onto the stage.

ActiveX Cast

The project now has access to the Phidget function calls and you are ready to begin coding.

The same teaching section which describes the examples also has further resources for programming your Phidget.

Follow the Examples

By following the instructions for your operating system and compiler above, you probably now have a working example and want to understand it better so you can change it to do what you want. This teaching section has resources for you to learn from the examples and write your own.

Your main reference for writing Adobe Director code will be our Adobe Director API information, with syntax for all of our functions:

  • COM API (This is the complete set of functions you have available for all Phidgets)
  • Device Specific APIs - The one for your Phidget can be found in its user guide.

To learn the details behind opening, configuring, using, and closing your Phidget, try the General Phidget Programming page. That page also describes using the Phidget in an event-driven manner and in a traditional manner, both of which are available in Adobe Director.

Example Flow

The Hello World example has this general structure so you can follow along. We also have an in-depth general introduction to writing Phidget code (like open, read data, etc), as well as the COM API for specific syntax:

// ----- Event and Other Functions -----

Create any Language-Specific Functions (exception handling)

Create General Attach, Detach, and Error Handling Functions:

On attach: Print Hello Message
On detach: Print Goodbye Message

 

In Adobe Director, you catch these event functions using their specific names as shown below in the Code Snippets section. The specific syntax for different events and which Phidgets you can catch which events for can be found in the COM API manual. Catching events by name hooks your event functions into the actual events when they occur.
In the example code, some event functions are common to all Phidgets. These are events such as OnAttach and OnDetach, etc.

Some event functions will be specific to each device, like when a tag is read on an RFID board, or when a sensor value changes on an Interface Kit.

// ----- Main Code -----

Create Manager Software Object
Hook Event Functions created above to Device
Open Device

Wait for 'Enter' key character input
Handle on-going attach and detach events
Print Hello and Goodbye messages
Exit upon input

Close Device

Delete Device

 

Creating a Phidget software object in Adobe Director is specific to the Phidget. For a Phidget Spatial, for example, this would involve creating a Spatial ActiveX object, as shown in the Write Your Own Code section above. The examples show working instances of how to do this, and how to use other API functions.

The object provides device specific methods and properties which are available from the API for your specific Phidget.

Code Snippets

Specific calls in Adobe Director will differ in syntax from those on the General Phidget Programming page, but the concepts stay the same.

It may help to have the General Phidget Programming page and this section open at the same time, because they parallel each other and you can refer to the Adobe Director syntax. However, many additional concepts are covered on the General Phidget Programming page on a high level, such as using multiple Phidgets, handling errors, and different styles of programming.

For example, if we were using a Phidget Interface Kit as our device, the general calls would look like this:

Step One: Initialize and Open

Your program can try to connect to the Phidget through a call to open. Open will continuously try to connect to a Phidget, based on the parameters given, even trying to reconnect if it gets disconnected. This means that simply calling open does not guarantee you can use the Phidget immediately. Because we then have to also attach the Phidget within software after opening, in Adobe Director the Open step and the next step - Attach - are often combined within one event trigger.

The different parameters and open calls can be used to open:

  • The first Phidget of a type it can find,
  • A Phidget based on a serial number, or even
  • A Phidget across the network.

The COM API manual lists all of the available modes that open provides. One important thing to remember is that when working with Phidgets, a local connection will reserve the device until closed. This prevents any other instances from retrieving data from the Phidget, including other programs. The one connection per device limit does not apply when exclusively using the Phidget WebService.

Step Two: Wait for Attachment (plugging in) of the Phidget

We can account for a connection by using event driven programming and tracking the AttachEvents and DetachEvents, or by calling WaitForAttachment as we show here.

WaitForAttachment will block indefinitely until a connection is made to the Phidget, or an optional timeout is exceeded. Here, the Phidget is opened and then attached when on clicking the Open button inside a mouseUp event:

on mouseUp me
    sprite(1).CallString("Open()")
    sprite(1).CallString("WaitForAttachment(3000)")
end

Step Three: Do Things with the Phidget

We recommend the use of event driven programming when working with Phidgets in Adobe Director. This allows the program to execute other tasks until the Phidget fires a new event. In Adobe Director, you can hook an event handler inside a script for the Phidget object by catching the event by name with the following code:

on OnSensorChange(Index, SensorValue) me
    member("OutputField").text = string(Index) & ": " & string(SensorValue)
end

With this method, the code inside OnSensorChange will get executed every time the InterfaceKit reports a change on one of its analog inputs. Please refer to the COM API manual for a full list of events and their usage.

Some values can be directly read and set on the Phidget, and inside polling loops used as an alternative to event driven programming. Simply use the CallString method for obtaining data such as SensorValue(Index) or OutputState(Index, OutputState) for Interface Kits. For example:

sprite(1).CallString("OutputState(0,1)")

Other events for different Phidgets can be found in the device's user guide, and in the COM API manual.

Step Four: Close and Delete

You can use CallString("Close") at any time outside of the Phidget's own event handlers to close the connection.

Multiple Phidgets

Multiple Phidgets of the same type can easily be run inside the same Adobe Director program. This requires another PhidgetInterfaceKit ActiveX object to be created and placed. The new object can then be set up, opened and used in the same process as the previous one. If the application needs to distinguish between the devices, open can be called with the serial number of a specific Phidget.

The complete set of functions you have available for all Phidgets can be found in the COM API.

Common Problems and Solutions/Workarounds

Windows users in The Netherlands

A number of users in the Netherlands have reported issues with running our example code. It is possible this is an issue related to the Dutch language pack used for Windows however, we do not currently really know why. As we aren't able to run a Dutch version of Windows here, it is difficult to debug. If you would like to help us work through the example code that we provide and help us figure out why, please Contact Us.