![]() |
Eterlogic virtual serial ports emulator |
Or if VSPE is already installed and VSPE_ComServer component is registered with regsvr32 tool just add reference to VSPE COM component as shown below:
Adding reference to VSPE COM server
using System; using System.ServiceProcess; using System.Text; using System.Windows.Forms; using VSPELib; namespace VSPE_API_Test { public partial class Form1 : Form { private VSPEApi _vspe; const string VspeActivationKey = ""; // <----- PUT ACTIVATION KEY HERE const string VspeServiceName = "EterlogicVspeDeviceManagerService"; // VSPE service. If it is running, API will not work, so in this sample we validate if it is running before trying to initialize VSPE. const int InitialComPortNumberForNewDevice = 5; const int MaxComPortNumberForNewDevice = 256; private int _nextVirtualComPortNumber = InitialComPortNumberForNewDevice; public Form1() { InitializeComponent(); } bool IsVspeServiceRunning() { using (ServiceController service = new ServiceController(VspeServiceName)) { return service.Status == ServiceControllerStatus.Running; } } private void Form1_Load(object sender, EventArgs e) { // Check if VSPE service is running if (IsVspeServiceRunning()) { MessageBox.Show($"{VspeServiceName} is running. Please stop it before trying to use VSPE API"); this.Close(); return; } _vspe = new VSPEApi(); // display VSPE API info label1.Text = _vspe.vspe_getVersionInformation(); // activate VSPE API if (_vspe.vspe_activate(VspeActivationKey) == 0) { // failed to activate! MessageBox.Show("Failed to activate with error: " + _vspe.vspe_getActivationError()); return; } // initialize API if (_vspe.vspe_initialize() == 0) { // failed to activate! MessageBox.Show("Failed to initialize"); return; } RefreshDevicesList(); } private void RefreshDevicesList() { if (_vspe == null) return; listBoxDevices.Items.Clear(); // get devices count int count = _vspe.vspe_getDevicesCount(); // enumerate devices for (int idx = 0; idx < count; ++idx) { // get device ID string name, initString; int ok, used; if (_vspe.vspe_getDeviceInfo(idx, out name, out initString, out ok, out used) == 0) { MessageBox.Show($"Failed to get information about device {idx}"); return; } var itemTitle = name + " (" + initString + ") OK=" + ok.ToString() + "\n"; listBoxDevices.Items.Add(itemTitle); } } private void CreateDevice_Click(object sender, EventArgs e) { if (_vspe == null) return; // Add new Connector device with next COM port number // To see actual parameters, run VSPE and just open right panel in VSPE and click on any device // This function returns deviceIndex which you can use later. -1 on error. int deviceIndex = _vspe.vspe_createDevice("Connector", $"{_nextVirtualComPortNumber++};0"); if (deviceIndex == -1) { MessageBox.Show("Failed to create new device"); } if (_nextVirtualComPortNumber == MaxComPortNumberForNewDevice) { _nextVirtualComPortNumber = InitialComPortNumberForNewDevice; } RefreshDevicesList(); } private void buttonDeleteAllDevices_Click(object sender, EventArgs e) { if (_vspe == null) return; if (_vspe.vspe_destroyAllDevices() == 0) { MessageBox.Show("Failed to delete all devices"); } RefreshDevicesList(); } private void buttonDeleteSelectedDevice_Click(object sender, EventArgs e) { if (_vspe == null) return; int idx = listBoxDevices.SelectedIndex; if (idx == -1) return; // nothing selected if (_vspe.vspe_destroyDevice(idx) == 0) { MessageBox.Show($"Failed to delete device with idx={idx}"); } RefreshDevicesList(); } private void buttonRefresh_Click(object sender, EventArgs e) { RefreshDevicesList(); } private void OnClosing(object sender, FormClosingEventArgs e) { if (_vspe == null) return; // Stop emulation _vspe.vspe_destroyAllDevices(); // Release VSPE _vspe.vspe_release(); } } }