我是 COM 编程的新手,解决方案可能很简单,但我做不到。我的 COM 客户端代码在早期绑定中运行良好。后期绑定问题。
客户端代码:使用 .net 4.0 框架
System.Type objType = System.Type.GetTypeFromProgID("Simple_ATL.First_ATL.1", "localhost", true);
object obj = System.Activator.CreateInstance(objType);
Type actualobj = obj.GetType();
actualobj.InvokeMember("AddNumbers", BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Public, null, obj, new object[] { 10, 20 });
实际obj.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;
};
};
请建议我的代码出了什么问题?
谢谢,帕万