Hey...
I ran into this and was wondering if somebody has an answer for it.
I created a C# COM object and was trying to QI for the custom interface.
Here is the C# COM code:
public interface IiAddin
{
long Initialize(Object app);
long Uninitialize();
}
namespace TEST_CSharpAddin
{
[Guid("F8C17785-DB6D-4982-9D68-CA8FF6DC785A")]
public interface CSharpAddin_Interface : IiAddin {
}
[Guid("4ADEE107-3FE3-4037-9463-FE7E94D9D544"),
InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface CSharpAddin_Events {
}
[Guid("70FD2E39-D014-4064-9A7C-8C4DA743257F"),
ClassInterface(ClassInterfaceType.None),
ComSourceInterfaces(typeof(CSharpAddin_Events))]
public class CSharpAddin : CSharpAddin_Interface
{
public long Initialize(Object app){
return 0;
}
public long Uninitialize(){
return 0;
}
}
}
( yes the project has "Make assembly COM-Visible" and "Register for COM interop" set in the project settings )
( and I have added "COMVisible(true)" to all of the interfaces as well, with no success either)
Here is the C++ code that does the QI for the interface:
HRESULT hResult;
CLSID ClassID;
hResult = CLSIDFromProgID(_T("TEST_CSharpAddin.CSharpAddin"), &ClassID);
IDispatch *pDispatch;
hResult = ::CoCreateInstance(ClassID, NULL, CLSCTX_INPROC_SERVER, IID_IDispatch, (void **)&pDispatch);
CComQIPtr<IiAddin> spAddIn(pDispatch);
IiAddin* pQIAddIn;
hResult = pDispatch->QueryInterface( IID_IiAddin, (void**)&pQIAddIn);
I did the strong name, put it in the GAC and registered the typelib on the C# object, like this article suggests:
Calling Managed .NET C# COM Objects from Unmanaged C++ Code[
^]
However, when I run the C++ code , the CLSIDFromProgID and CoCreateInstance succeed, but the QI for IiAddin fails with 0x80040154 ( class not registered )
Any ideas?