首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MIDL更改接口名称

MIDL更改接口名称
EN

Stack Overflow用户
提问于 2014-10-10 15:30:20
回答 1查看 1.2K关注 0票数 4

我有一个COM dll,它由使用COM的.NET应用程序使用.在其中一个CoClasses中,有一个名为IT6TrackData的接口,它有一个名为TrackData的get属性

来自IDL文件:

代码语言:javascript
复制
Interface IT6TrackData
{
   [propget, id(1)] HRESULT TrackData([out, retval] SAFEARRAY(BYTE) *pVal);
}

当为上述IDL文件查看TLB文件时,它将属性显示为trackData (小写为t),原因是客户端应用程序将该属性引用为trackData,并且直到现在一切都正常。

作为增强的一部分,上面的接口被升级为具有put属性

代码语言:javascript
复制
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在大写),这将破坏继续以小写的“t”引用trackData的旧.NET客户端。

我看过这篇KB文章http://support2.microsoft.com/kb/220137/en-gb

但有没有出路,有没有人知道这个问题的解决办法。

非常感谢你的关注。

IDL文件

代码语言:javascript
复制
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;
   };
};
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-10 17:22:43

这是内置在Windows中的类型库生成器中的黑客攻击的副作用。它解决了一种不区分大小写的语言所带来的麻烦。它可以在一个套管中声明一个类型,但在另一个套管中的其他地方引用它。Visual就是这种语言的主要例子。

黑客非常粗糙,它获取它遇到的第一个标识符的大小写,然后更改任何后续标识符的大小写以匹配。意外的大小写更改最典型的原因是参数的名称,通常用小写首字母拼写。因此,您可能在代码的前一个版本中有一个"trackData“方法参数。

在您的修订版中,标识符的顺序发生了更改,或者您重命名或删除了该参数。现在用"TrackData“代替。

如果您有现有的客户端代码,这取决于原来的大小写,那么除了更改源中的大小写之外,您几乎没有什么可以做的。修复错误,但对你的客户来说并不令人惊讶,因为他们无法分辨出不同之处:)

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26302927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档