Yonathan Winata
Yonathan Winata

Reputation: 31

How to interact with another programs with OLE Automation in C#?

I create an application with C# that can read item data from SQL Server and push it to the scale system named "SLP-V Ishida Retail Scales". They have an interface "SLP-V Automation Interface" that allows user programs to interact with their systems. This is the note from help page in SLP-V :

The automation interface (also known as the "COM (common object model) interface") provides a method for user programs to access SLP-V functions. The most common application for this is the use of VB Script to automate SLP-V operations such as importing host files. However, the automation interface can be used from any programming environment that supports automation (COM), and this is the preferred method for incorporating SLP-V functions into end-user applications.

This topic provides a reference for the methods and properties of the SLP-V automation object and includes some sample programs.

SLP-V Automation Object

The SLP-V automation object name is "Ishida.Slp.Scripting.CommonApi" and the type library file is "SlpScripting.tlb".

My question is, does the C# language allow us to interact other programs using OLE Automation? And if the answer is yes, how do I interact with my program? I mean like calling their method. Because I can't add SlpScripting.tlb as a reference. It says

A reference to 'SLP Scripting Interface ' could not be added The ActiveX type library 'SlpScripting.tlb' was exported from a .NET assembly and cannot be added as reference. Add a reference to the .NET assembly instead

And I have searched Google about this, but I didn't find the answer.


Finally found a solution I don't have to add reference in c#, instead of just using :

System.Type objType = System.Type.GetTypeFromProgID("The name of progID that you want to call"); 
dynamic comObject = System.Activator.CreateInstance(objType);

And then just call the function / method that exist in that object, for example :

comObject.LoginToHost("localhost", 8085, username, pass);

Upvotes: 3

Views: 5140

Answers (1)

Rainer Schaack
Rainer Schaack

Reputation: 1618

OLE automation is old wording for what we now call COM. And yes, .NET can access COM very easily (starting with .NET 1.0).

You have these options:

Method 1

First "register" the COM library on your development system. Look in the documentation of the SLP system, probably this was done already during setup. If not, normally a COM DLL can be registered manually with regsvr32 XXX.DLL. Be aware of 32/64 Bit issues (if you want to register a 32 bit COM DLL in 64 bit Windows, use C:\Windows\SysWOW64\regsvr32.exe).

Then your COM DLL should be listed in Visual Studio if you go to

Add Reference ==> COM

as "SlpScripting Type Library 1.0" or similar.

Then, add a "using SLPxxxx" or similar (Intellisense should show the real name).

After this, you should be able to create a new instance of your COM object.

For additional help, search for "C# COM interop", you will find lots of informations.

Method 2

Open a Visual Studio command prompt, and enter:

tlbimp SlpScripting.tlb 

A DLL will be created, which you can add as a reference.

Upvotes: 3

Related Questions