Click here to Skip to main content
15,884,472 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
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:

C#
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:

C++
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);  // << FAILS >>

// So I tried this instead:
IiAddin* pQIAddIn;
hResult = pDispatch->QueryInterface( IID_IiAddin, (void**)&pQIAddIn);  // << FAILS >>




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?
Posted
Updated 8-Oct-13 4:38am
v3
Comments
cariolihome 8-Oct-13 17:33pm    
Please, specify value of IID_IiAddin constant, and attach tlb library

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900