Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# &引用;COM目标不实现IDispatch“;例外_C#_Com_Atl_Idispatch - Fatal编程技术网

C# &引用;COM目标不实现IDispatch“;例外

C# &引用;COM目标不实现IDispatch“;例外,c#,com,atl,idispatch,C#,Com,Atl,Idispatch,我是COM编程新手,解决方案可能很简单,但我不能。 我的COM客户端代码在早期绑定中运行良好。后期绑定的问题 客户端代码:使用.NET4.0框架 System.Type objType=System.Type.GetTypeFromProgID(“Simple\u ATL.First\u ATL.1”,“localhost”,true); object obj=System.Activator.CreateInstance(objType); 类型actualobj=obj.GetType();

我是COM编程新手,解决方案可能很简单,但我不能。 我的COM客户端代码在早期绑定中运行良好。后期绑定的问题

客户端代码:使用.NET4.0框架

System.Type objType=System.Type.GetTypeFromProgID(“Simple\u ATL.First\u ATL.1”,“localhost”,true);
object obj=System.Activator.CreateInstance(objType);
类型actualobj=obj.GetType();
actualobj.InvokeMember(“AddNumbers”,BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Public,null,obj,new object[]{10,20});
ActualLobj.InvokeMember引发“COM目标未实现IDispatch”异常

IDL文件:

[
    object,
    uuid(C8F6E230-2672-11D3-A8A8-00105AA943DF),
    dual,
    helpstring("IFirst_ATL Interface"),
    pointer_default(unique)
]
interface IFirst_ATL : IDispatch
{
    [id(1), helpstring("method MultipleNumbers")] HRESULT MultipleNumbers([in] long Num1, [in] long Num2, [out, retval] long *ReturnVal);
    [id(2), helpstring("method AddNumbers")] HRESULT AddNumbers([in] long Num1, [in] long Num2, [out , retval] long *ReturnVal);
};

[
     uuid(34C534A0-2671-11D3-A8A8-00105AA943DF),
     version(1.1),
     helpstring("Simple_ATL 1.1 Type Library")
]
library SIMPLE_ATLLib
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");

[
    uuid(970599E0-2673-11D3-A8A8-00105AA943DF),
    version(2.1),
    helpstring(" New First_ATL Class")
]
coclass First_ATL
{
    [default] interface IFirst_ATL;
};

};
请告诉我我的代码出了什么问题

谢谢,
Pavan

添加了更多我关注但对我无效的内容。IDL只承诺您实现IDispatch,但根据错误消息,您实际上没有这样做。这通常很难出错,ATL向导会自动生成大量代码。包括这个IDL,没有提示。也许是不合时宜的编辑,在某种程度上搞砸了对IDispatchImpl的继承。不知道发布什么代码是一个强烈的暗示,表明您将很难找出自己做错了什么。我们也是。谢谢@HansPassant。我在自动生成的代码BEGIN_COM_MAP(CFirst_ATL)COM_INTERFACE_条目(IFirst_ATL)COM_INTERFACE_条目(IDispatch)中发现了错误,当我添加它是working END_COM_MAP()时