У меня есть dll COM, который потребляется приложениями .NET с использованием COM Inter-op. В одном из CoClasses, есть интерфейс называется IT6TrackData и имеет один получить свойство TrackDataMIDL меняет имя интерфейса
Из файла IDL:
Interface IT6TrackData
{
[propget, id(1)] HRESULT TrackData([out, retval] SAFEARRAY(BYTE) *pVal);
}
Когда файл TLB рассматривается для указанного выше файла IDL, его показывает свойство как trackData (t в нижнем регистре) По какой-то причине приложение-клиент ссылалось на это свойство как trackData, и все работало нормально до сих пор.
В рамках усиления вышеуказанного интерфейса был обновлен, чтобы иметь свойство
Interface IT6TrackData
{
[propget, id(1)] HRESULT TrackData([out, retval] SAFEARRAY(BYTE) *pVal);
[propput, id(1)] HRESULT TrackData([in]SAFEARRAY(BYTE) pVal);
}
пут Теперь, когда файл TLB рассматривается для приведенного выше IDL файла, он показывает свойство как TrackData (т находится в верхнем регистре), это ломает старых клиентов .NET, которые продолжают ссылаться на 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;
};
};
Вы пробовали добавить второй интерфейс? Возникает ли та же проблема? – rrirower
даже после удаления недавно добавленного свойства put, он все еще отображается в T (верхний регистр) – user2101801