我有一个.NET DLL,它有一些接口\类,暴露给com。在生成过程中生成一个.tlb文件,这个tlb被一些C++代码引用。结果编译器为tlb生成一个.tlh文件。.tlh在2台机器上生成是不同的
当我在本地运行构建时,其中一个接口的属性中的一个属性以tlh中的相应方法结束,而该名称不具有相同的名称。 .net代码中的属性称为PropertyA,最终被称为get_propertyA,而PropertyB最终称为get_PropertyB。发生这种情况时,我并没有眨眼睛,只是使用了tlh中定义的方法,并假设所有内容都是hunky dory,但是当我对这些更改进行评估时,构建对其他人无效,因为编译器生成了名为get_PropertyA的属性,并且get_PropertyB(注意propertyA中的大小写不匹配)。
在两台机器上生成的tlb文件是相同的(根据十六进制比较器),并且tlh文件都由相同的编译器版本生成。
的构建过程做创建TLB:regasm路径\到\ DLL \ MYDLL.DLL -tlb:路径\为\输出\ mydll.tlb
为什么我的本地版本与属性结束了任何想法名称不正确?或者我能做些什么来解决它?
更新:我读了tlbexp将使用它找到的字符串的第一个版本,并且可以通过重新编译进行更改。虽然我没有使用tlbexp,但我想知道这是否是问题所在。我找到了与我的方法相同的参数(在其他方法中),但在开始时使用小写字母。所以我取代了所有这些。重建,没有变化。所以我然后重新命名我的COM方法。重新构建并获得了预期缺失的方法错误。将该方法重命名为原始名称,并且它似乎是固定的。因为它现在似乎工作,我不能再次失败,我不能尝试建议的解决方案,但我喜欢重命名的想法,以防将来发生这种情况。
使用“重命名”解决方法时要小心 - 它可以像简单的文本替换一样工作,并且有时可能会导致出现奇怪的结果。我已经更新了大纲的答案。 – sharptooth 2009-05-28 09:01:55
谢谢你的抬头。如果问题出现,我会记住这一点。 – 2009-05-28 10:43:59