I have developed ATL COM DLL in visual c++. I register the dll and had added reference to the dll in c++. I try to use c++ COM dll in WCF REST services in c#,but I get the following error:
Unable to cast COM object of type 'System.__ComObject' to interface type 'ProVisionCOMDemoLib.ReadDATFile'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{91820B46-B3FD-41FE-9A75-45A72424F480}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).
The following code used to call com c++ dll in WCF rest web services in c#:
object sResult;
ProVisionCOMDemoLib.ReadDATFile objTest = new ProVisionCOMDemoLib.ReadDATFile();
objTest.ReadDATFile(mFileName, out sResult)
Please help me to solve this error.Please suggest some ways to call c++ com dll in WCF Rest services in c#.
****My IDL file contents are below****:
import "oaidl.idl";
import "ocidl.idl";
[
object,
uuid(91820B46-B3FD-41FE-9A75-45A72424F480),
pointer_default(unique)
]
interface IReadDATFile : IUnknown
{
[] HRESULT ReadDatFile([in] BSTR FilePath, [out] VARIANT* pVariant);
};
[
uuid(A30039A8-FDC6-4EC5-A2D7-D6257251B44F),
version(1.0),
]
library ProVisionCOMDemoLib
{
importlib("stdole2.tlb");
[
uuid(FD96E613-579F-4319-AE21-8E4D2A1DF975)
]
coclass ReadDATFile
{
[default] interface IReadDATFile;
};
};
ReadDATFile.h that contains the BEGIN_COM_MAP section:
class ATL_NO_VTABLE CReadDATFile :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CReadDATFile, &CLSID_ReadDATFile>,
public IReadDATFile
{
public:
CReadDATFile()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_READDATFILE)
BEGIN_COM_MAP(CReadDATFile)
COM_INTERFACE_ENTRY(IReadDATFile)
END_COM_MAP()
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
return S_OK;
}
void FinalRelease()
{
}
public:
STDMETHOD(ReadDatFile)(BSTR FilePath, VARIANT* pVariant);
};
OBJECT_ENTRY_AUTO(__uuidof(ReadDATFile), CReadDATFile)
COM component Registration
The ATL COM dll is registered successfully before using it in WCF REST services by the following steps:
The COM dll is 32bit dll and WCF rest service is also 32bit
Thanks and Regards vivek
User contributions licensed under CC BY-SA 3.0