# Implementing .dll function for usb device at HMI

**URL:** <https://forum.inductiveautomation.com/t/implementing-dll-function-for-usb-device-at-hmi/81996>\
**Category:** Ignition\
**Created:** [November 16, 2023, 4:23pm UTC](https://forum.inductiveautomation.com/t/implementing-dll-function-for-usb-device-at-hmi/81996 "2023-11-16T16:23:57Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Dustin\_Richards](https://avatars.discourse-cdn.com/v4/letter/d/fbc32d/32.png) [@Dustin\_Richards](https://forum.inductiveautomation.com/u/Dustin_Richards)\
**Post date:** [November 16, 2023, 4:23pm UTC](https://forum.inductiveautomation.com/t/implementing-dll-function-for-usb-device-at-hmi/81996/1 "2023-11-16T16:23:57Z")

</div>

Ok, I am very new to Ignition so please bear with me.

I am trying to utilize a .dll library provided by my supplier to access data/functions of a USB device at the HMI locations. This device performs proprietary functions over CAN that would be lengthy to try and replicate.  
The .dll is written in C#, which I am hoping is not a problem.

Any help, or direction to documentation to assist would be much appreciated.

-Dustin-  
Sr. Project Engineer  
Electrical and Controls Engineering

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [November 16, 2023, 4:27pm UTC](https://forum.inductiveautomation.com/t/implementing-dll-function-for-usb-device-at-hmi/81996/2 "2023-11-16T16:27:34Z")

</div>

**If** you're using Vision, you have basically two options:

1. Launch the external process directly from the Vision client using [`system.util.execute`](https://docs.inductiveautomation.com/display/DOC81/system.util.execute)
2. Keep the external process running constantly on the local machine, have it act as a server, and communicate with it over a local port using e.g. [`system.net.httpClient()`](https://docs.inductiveautomation.com/display/DOC81/system.net.httpClient) (or some other flavor of inter-process communication).

If you're using Perspective, you have basically no options.

Ignition is written in Java and Kotlin and runs exclusively on the JVM, not the CLR. You will not be able to 'wrap' DLLs or other native code easily into Ignition.
