MIDL更改接口名称
MIDL changes the Interface name
我有一个COM dll,它由使用COM Inter-op的.NET应用程序使用。在其中一个CoClass中,有一个名为IT6TrackData的接口,它有一个称为TrackData 的get属性
来自IDL文件:
Interface IT6TrackData
{
[propget, id(1)] HRESULT TrackData([out, retval] SAFEARRAY(BYTE) *pVal);
}
当查看上面IDL文件的TLB文件时,它将属性显示为trackData(小写为t)出于某种原因,客户端应用程序将此属性称为trackData,直到现在一切都很正常。
作为增强的一部分,上述接口被升级为具有看跌属性
Interface IT6TrackData
{
[propget, id(1)] HRESULT TrackData([out, retval] SAFEARRAY(BYTE) *pVal);
[propput, id(1)] HRESULT TrackData([in]SAFEARRAY(BYTE) pVal);
}
现在,当为上面的IDL文件查看TLB文件时,它将属性显示为TrackData(t为大写),这打破了继续引用trackData,小写为"t"。
我已经阅读了这篇KB文章http://support2.microsoft.com/kb/220137/en-gb
但是,有没有办法解决这个问题,有人知道解决办法吗。
感谢您的关注。
IDL文件
import "oaidl.idl";
import "ocidl.idl";
[
object,
uuid(72867CE8-41B6-459E-A258-C7A162A26D5E),
dual,
nonextensible,
helpstring("ITFST6TrackData Interface"),
pointer_default(unique)
]
interface ITFST6TrackData : IDispatch{
[propget, id(1), helpstring("property TrackData")] HRESULT TrackData([out, retval] SAFEARRAY(BYTE) *pVal);
[propput, id(1), helpstring("property TrackData")] HRESULT TrackData([in]SAFEARRAY(BYTE) pVal);
};
[
uuid(1D7ABC17-2738-4373-9B6B-239E344DBD21),
version(1.0),
helpstring("SampleCom 1.0 Type Library")
]
library SampleComLib
{
importlib("stdole2.tlb");
[
uuid(2013CC98-47A7-468F-912A-2A2CAE25E327),
helpstring("TFST6TrackData Class")
]
coclass TFST6TrackData
{
[default] interface ITFST6TrackData;
};
};
这是内置在Windows中的类型库生成器遭到黑客攻击的副作用。它有一个解决由不区分大小写的语言引起的问题的方法。它可能在一个大小写中声明一个类型,但在另一种大小写中的其他地方引用它。Visual Basic就是这种语言的典型例子。
黑客攻击非常粗糙,它使用它遇到的第一个标识符的大小写,然后更改任何后续标识符的大小格式以匹配。意外大小写更改的最典型原因是参数的名称,通常用小写首字母拼写。因此,您可能在以前版本的代码中有一个"trackData"方法参数。
在您的修订版中,标识符的顺序发生了更改,或者您重命名或删除了该参数。现在获取"TrackData"。
如果您有依赖于原始大小写的现有客户端代码,那么除了在源代码中更改大小写外,您几乎无能为力。Fugly修复,但对您的客户来说并不奇怪,因为他们分不清区别:)
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- Visual C++GC接口如何启用它以及要包含哪个库
- Windows.h与GLFW.h的接口
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 提供与TMP和SFINAE的通用接口
- 为重写std::exception的库生成swig接口时出错
- 内联如何影响模块接口中的成员函数
- COM 接口 c# 封送数组数组
- 如何在 SCIP C++ 接口中获取 MILP 约束矩阵中的系数值
- 重载 -> shared_ptr 个实例中的箭头运算符<interface>,接口中没有纯虚拟析构函数
- 如何绑定 C++ gRPC 客户端的网络接口
- 模板化接口 - 创建一个泛型模板类以返回任何容器
- 如何从实现接口的模板化类实例访问结构
- 带有进度表的 curl 多接口程序
- 设计帮助 - 为不同类型的消息处理通用接口的设计模式
- 我可以在具有一个标头和一个接口的 cpp 文件中有多个嵌入吗?
- 类接口,可以创建N个方法
- 类具有相同的接口,但参数的类型不同
- 在 midl 中使用 Windows::Foundation 命名空间接口
- MIDL更改接口名称