Я целый день боролся с VStudio, Google и другими инструментами и сайтами и не нашел решения - ПОМОГИТЕ !!
У меня есть два интерфейса COM (чистый COM, без ATL):
IMyClassFactory и IMyClass с соответствующими реализациями
Я хочу использовать их из C #, НО без регистрации COM-сервера с regsvr32.
Я открываю фабрику классов с помощью CoRegisterClassObject и могу успешно создавать объекты IMyClass с помощью CoCreateInstance из неуправляемого кода.
Итак, взаимодействие C # ...
Я создал оболочку .NET с tlbimp myComServer.tlb и загрузил ее как ссылку на мой клиент на C #.
Затем, когда я пытаюсь создать экземпляр IMyClass, я получаю:
An unhandled exception of type 'System.InvalidCastException' occurred in COMTestClient.exe
Additional information: Unable to cast COM object of type 'MyComServerLib.MyClass' to interface type 'MyComServerLib.IMyClass'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{9F8CBFDC-8117-4B9F-9BDC-12D2E6A92A06}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).
Теперь я добавил следы в QueryInterface, и единственные случаи, когда я возвращаю E_NOINTERFACE, это когда он запрашивает какой-либо из интерфейсов, связанных с Marshal, или IManagedObject.
Как мне это исправить ??
РЕДАКТИРОВАТЬ: мой файл IDL:
import "unknwn.idl";
[
object,
uuid(...),
nonextensible,
pointer_default(unique)
]
interface IMyClass : IUnknown
{
HRESULT(SetFirstNumber)(long nX1);
HRESULT(SetSecondNumber)(long nX2);
HRESULT(DoTheAddition)([out,retval] long *pBuffer);
};
[
uuid(...)
]
library MyLib
{
importlib("stdole2.tlb");
[
uuid(...)
]
coclass IMyClassImpl
{
[default] interface IMyClass;
};
}