I’m trying to use a 3rd party COM DLL (I don’t believe its a .NET component) from a .NET service without registering the COM DLL but I’m having no luck so far.
I’ve copied the manifest files from here (http://stackoverflow.com/questions/465882/generate-manifest-files-for-registration-free-com) to use as a starting point (I generated the COM DLL manifest using the referenced mt.exe/regsvr42.exe). However all I get is the following error:
Exception: System.InvalidCastException
Message: Unable to cast COM object of type ‘LOGICLib.LogicClass’ to interface type ‘LOGICLib.ILogic’. This operation failed because the QueryInterface call on the COM component for the interface with IID ‘{AAAAAAAA-AAAA-AAAA-AAAA-AAAAAA3E8FB4}’ failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).
Source: Interop.LOGICLib
at LOGICLib.LogicSecuredClass.Connect(String IP, UInt16 Value, Int32& Result)
at My.Server.MyAssembly.Loader.Connect() in D:\MyProject\Source\Server\MyAssembly\Loader.cs:line 461
The application manifest is named after the exe that starts the service – I’ve also tried naming it after the assembly that calls the COM DLL. I’ve tried starting on the command line and via Visual Studio’s debugger. I’ve also tried using the Interop file supplied by the third party and generating my own.
(Note – I’ve only tested under Windows XP so far.)
I’ve spent two days on this now and have not progressed at all. Any ideas what I may have missed?
Yes, this does not work. Windows always looks for a manifest in the EXE itself, embedded as an unmanaged resource. Only when it cannot find one in there will it look for a .manifest file on disk. Problem is, a managed program built with VS2008 and up already has a manifest. The default one says “I’m Vista aware” only.
You can verify this for yourself by using File + Open + File and selecting your EXE. Open the RT_MANIFEST node and double-click resource 1. If you don’t see your reg-free COM manifest entries there then it isn’t going to work.
To fix, use Project + Add New Item and select the Application Manifest File item template. You’ll get the boilerplate manifest, copy and paste your regfree COM entries in there.