问题描述
我有一个容易重复的内部编译器问题,我找不到解决方法.如果我创建一个简单的类型库来保存所有数据类型:
I have an easily repeatable internal compiler problem that I can't find a workaround for. If I create a simple type library to hold all of my data types:
//伪IDL代码
库DataTypeLib
library DataTypeLib
{
struct MyStruct
struct MyStruct
{
int field1;
int field1;
SAFEARRAY(BSTR)字段2;
SAFEARRAY(BSTR) field2;
};
};
然后我可以毫无问题地将其编译为tlb文件.然后,我创建一个IDL,该IDL在该tlb上调用importlib并定义一个使用该结构的接口:
Then I can compile that into a tlb file with no troubles. Then I create an idl that calls importlib on that tlb and defines an interface that uses that structure:
接口IMyInterface
interface IMyInterface
{
HRESULT MyFunction([in] MyStruct *输入);
HRESULT MyFunction( [in] MyStruct* input );
};
importlib("DataTypeLib.tlb");
importlib("DataTypeLib.tlb");
我得到以下信息:
1> midl:错误MIDL9008:内部编译器问题-请参阅文档,以获取有关如何找到解决方法的建议.
1>midl : error MIDL9008 : internal compiler problem - See documentation for suggestions on how to find a workaround.
1> midl:断言失败:0,文件z:\ nt \ com \ rpc \ midl \ codegen \ ndrcls.hxx,第492行
1>midl: Assertion failed: 0, file z:\nt\com\rpc\midl\codegen\ndrcls.hxx, line 492
我对ndcrls.hxx文件的所有搜索均未发现任何结果.到目前为止,我只能想出的唯一解决方法是在MyStruct中不要使用SAFEARRAY,但这并不是什么解决方法.其他人有没有走过这个运气吗?
All of my searches for that ndcrls.hxx file turned up nothing. The only workaround I can come up with so far is not to have a SAFEARRAY in MyStruct, but that isn't much of a workaround. Anyone else had any luck in getting past this one?
推荐答案
我不确定在哪里可以找到以前的错误报告或报告错误;可能 https://connect.microsoft.com/VisualStudio .我在这里搜索,但没有找到ndrcls或MIDL9008,因此您可以尝试在此处提交新的错误报告.也许这里经验更丰富的人之一会提供更多帮助.
I am not sure where to look for previous reports of bugs or to report a bug; probably https://connect.microsoft.com/VisualStudio. I searched in there and found nothing for ndrcls or MIDL9008, so you can try submitting a new bug report there. Perhaps one of the more experienced people here will help more.
这篇关于MIDL“内部编译器问题"(Internal Compiler problem)试图导入带有SAFEARRAY的结构的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!