I have some routines I would like to access that are in a COM .dll I have written a program in C# that uses interop to get to the methods and properties. So, it works in a C# environment in VS2010. I add the reference in the project/solution under the COM tab. The issue I have is that in MC.Net editor when right click and try to add it as a reference, it is looking for an assembly. (presumably C#). Sooooo - I am semi literate in C# - what must I do to be able to call 'unmanaged' code - specifically this COM .dll? Do I need to do this via DLLImport? This is 3rd party functions I purchased and I don't have the source.
TIA
John
MC.Net indicator referencing COM.DLL [SOLVED]
-
- Posts: 53
- Joined: 18 Feb 2011
- Has thanked: 11 times
- Been thanked: 13 times
- Henry MultiСharts
- Posts: 9165
- Joined: 25 Aug 2011
- Has thanked: 1264 times
- Been thanked: 2957 times
Re: MC.Net indicator referencing COM.DLL
Hello John,
You can follow this guide or create a Dll wrapper in Visual Studio for your Com Dll and connect this wrapper to MultiCharts .Net using References.
You can follow this guide or create a Dll wrapper in Visual Studio for your Com Dll and connect this wrapper to MultiCharts .Net using References.
-
- Posts: 53
- Joined: 18 Feb 2011
- Has thanked: 11 times
- Been thanked: 13 times
Re: MC.Net indicator referencing COM.DLL
Henry,
Using that guide is how I did access the COM .dll in my test stand alone program in VS 2010. So are you saying I can add the reference in VS2010 and it will stick when I open the indicator in MC.Net editor? Or, are you saying I need to use the TlbImp method? A more manual approach. If I use the TlbImp method, how would I handle the need for a /R when I compile?
John
Using that guide is how I did access the COM .dll in my test stand alone program in VS 2010. So are you saying I can add the reference in VS2010 and it will stick when I open the indicator in MC.Net editor? Or, are you saying I need to use the TlbImp method? A more manual approach. If I use the TlbImp method, how would I handle the need for a /R when I compile?
John
- Henry MultiСharts
- Posts: 9165
- Joined: 25 Aug 2011
- Has thanked: 1264 times
- Been thanked: 2957 times
Re: MC.Net indicator referencing COM.DLL
You can add the reference in VS2010, but to stick the indicator in MC.Net editor you need to create and use the wrapper.
Alternatively:
Alternatively:
Although TlbImp is the preferred method for converting COM definitions to C#, it is not always possible to use it (for example, if there is no typelib for the COM definitions, or if TlbImp cannot handle the definitions in the typelib). In these cases, the alternative is to manually define the COM definitions in C# source code using C# attributes. Once you have created the C# source mapping, you simply compile the C# source code to produce the managed wrapper.
The main attributes you need to understand to perform COM mapping are:
ComImport - Marks a class as an externally implemented COM class.
Guid – Used to specify a universally unique identifier (UUID) for a class or an interface.
InterfaceType – specifies whether an interface derives from IUnknown or IDispatch.
PreserveSig – specifies whether the native return value should be converted from an HRESULT to a .NET Framework exception.
Each of these attributes is shown in the context of an actual example in this tutorial.
-
- Posts: 53
- Joined: 18 Feb 2011
- Has thanked: 11 times
- Been thanked: 13 times
Re: MC.Net indicator referencing COM.DLL
Are there othere restrictions when using C# with MC.Net? Addign this to a FAQ would be a good thing.
John
John
- Henry MultiСharts
- Posts: 9165
- Joined: 25 Aug 2011
- Has thanked: 1264 times
- Been thanked: 2957 times
Re: MC.Net indicator referencing COM.DLL [SOLVED]
I have created a small FAQ hereAre there othere restrictions when using C# with MC.Net? Addign this to a FAQ would be a good thing.
John
- Henry MultiСharts
- Posts: 9165
- Joined: 25 Aug 2011
- Has thanked: 1264 times
- Been thanked: 2957 times
Re: MC.Net indicator referencing COM.DLL
Here is an example how COM objects can be used via interface and wrapper.
This sample will call a dialogue window FileRun (=Win+R) on the last bar.
This sample will call a dialogue window FileRun (=Win+R) on the last bar.
- Attachments
-
- CallCOMObjectsExmpl.zip
- (22 KiB) Downloaded 607 times