C#与VC进程外组件回调的问题
问题说明:
需要开发一个某软件的扩展功能,它需要采用 C# 加外接进程外COM组件的方式来完成,
其中,我在VC生成的ATL进程外组件中,定义了相应的接口:
// Forward declare all types defined in this typelib
interface IComInvoke;
interface IComCallback;
[
odl,
uuid(7578C871-D9B3-455a-8371-A82F7D864D0D),
version(1.0),
oleautomation,
custom(7A6177BC-3167-451d-B02D-904D54401F2B,
"call_Serivceatl.IComInvoke")
]
interface IComInvoke : IUnknown {
HRESULT _stdcall AtlFunc([in] IComCallback* callback);
};
[
odl,
uuid(3E0D4ED3-898B-470f-AD77-921F2AE29F74),
version(1.0),
oleautomation,
custom(7A6177BC-3167-451d-B02D-904D54401F2B,
"call_Serivceatl.IComCallback")
]
interface IComCallback : IUnknown {
HRESULT _stdcall SayHello();
};
在C#中,我做了相应的测试,发现传数字型参数或者字符串都没有问题,但是如果要传入回调接口,程序就会报错:
测试的代码片断如下:
Guid classGuid = new Guid("E2AC7243-DB56-49F2-B13D-98F98741BB53");
Guid interfaceGuid = new Guid("7578C871-D9B3-455a-8371-A82F7D864D0D");
object obj = UnsafeNativeMethods.CoCreateInstance(
classGuid,
null,
4,
interfaceGuid);
IComInvoke atl = (IComInvoke)obj;
// try to parse the current module pointer.
atl.AtlFunc((IComCallback)this);
如果传接口,始终报 0xc0000005,急切等待高手指点!!!