我用c ++开发了一个COM dll。现在我有一个MFC客户端,它使用COM dll公开的一些接口。从此应用程序调用CoCreateInstance时,它失败并显示以下错误:80020008 DISP_E_BADVARTYPE。我在我的idl文件中添加了一个新接口和一个新方法。我希望传递我已在idl文件中定义结构(使用UUID)的结构。现在我在我的方法中将它作为SAFEARRAY传递。请帮助我理解这个错误以及它何时发生。
答案 0 :(得分:0)
DISP_E_BADVARTYPE是COM互操作编组错误。 (您的客户端是否使用CLR支持进行编译?)这意味着无法对类型进行编组,因为它不受支持 - 它不符合CLR,也可能不兼容自动化。
此问题的一个原因是不匹配的整数类型,例如将CLR长整数传递给COM双接口(64位整数不兼容自动化。)
另一个可能的原因可能是您的结构类型。用户定义类型的SafeArrays是自动化兼容的(VT_ARRAY | VT_RECORD),所以我希望你可以做你想做的事情。但也许你的UDT中存在一些不兼容的东西。或者你可能错误地指定了它,比如VT_SAFEARRAY或VT_USERDEFINED。
你可以张贴你的IDL吗?