我有一个遗产控制(Core),接受“IUn known
到ink。 目的是通过这一汇合界面使核心能够读/篡改数据。 核心/汇点目前在遗产系统中使用,不易修改。
问题Im在于,我试图将核心从管理法中提出来,并在一个目标(目标)上通过,以实施管理法中的思维。 我把这个核心.倒在准备把这个思想叫上。 在发出这一呼吁之前(而不是之后),我收到以下信息:
停工检查失败 #0 - 在整个功能电话中,ESP的价值没有得到适当维护......
我亲眼看到并努力采用纯粹的遗产法,但采用有管理的守则是很费力的。
这里是我认为有必要的两个接口中最小的代表。
interface ICore : IDispatch
{
[id(1), helpstring("method Init")] HRESULT Init([in] IUnknown *pDataManSink);
HRESULT FireOnImport([in] LPCOLESTR pszFormName, [in] LPCOLESTR pszTagName, [in] VARIANT pszData);
... more methods
}
从IDL(为了缓解问题的示范而减少)获得的数据
interface IDataManagerSinkEx : IUnknown
{
[helpstring("method ReadData")] HRESULT ReadData([in] LPCTSTR pszDataKey, [out, retval] BSTR* pbsData);
[helpstring("method WriteData")] HRESULT WriteData([in] LPCTSTR pszDataKey, [in] LPCTSTR pszData);
[helpstring("method ReadDataEx")] HRESULT ReadTagEx([in] LPCTSTR pszDataKey, [out] short *pwExtraInfoOut, [out, retval] BSTR *pbsData);
[helpstring("method WriteDataEx")] HRESULT WriteTagEx([in] LPCTSTR pszDataKey, [in] short wExtraInfo, [in] LPCTSTR pszData);
}
我尝试了C#中的各种智囊,以防出现错误。 这里是最目前的执行,是,我手把接口定义编码,因为从类型平衡中采用这一定义并不可行。 (同一问题)
[ComImport]
[Guid( "AB79770E-8143-45E6-B082-E985E6DFA5CB" )]
[InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
public interface IMyDataManagerSinkEx
{
[PreserveSig]
int ReadData( [MarshalAs( UnmanagedType.LPStr )]string pszDataKey, out string data );
[PreserveSig]
int WriteTag( [MarshalAs( UnmanagedType.LPStr )]string pszDataKey, [MarshalAs( UnmanagedType.LPStr )]string pszData );
[PreserveSig]
int ReadTagEx( [MarshalAs( UnmanagedType.LPStr )]string pszDataKey, out short pwExraInfoOut, out string dataOut );
[PreserveSig]
int WriteTagEx( [MarshalAs( UnmanagedType.LPStr )]string pszDataKey, short wExtraInfo, [MarshalAs( UnmanagedType.LPStr )]string pszData );
}
class public SinkImpl : IMyDataManagerSinkEx
{
[PreserveSig]
public int ReadData( [MarshalAs( UnmanagedType.LPStr )]string pszDataKey, out string data )
{
throw new NotImplementedException();
}
[PreserveSig]
public int WriteTag( [MarshalAs( UnmanagedType.LPStr )]string pszDataKey, [MarshalAs( UnmanagedType.LPStr )]string pszData )
{
throw new NotImplementedException();
}
[PreserveSig]
public int ReadTagEx( [MarshalAs( UnmanagedType.LPStr )]string pszDataKey, out short pwExraInfoOut, out string dataOut )
{
throw new NotImplementedException();
}
[PreserveSig]
public int WriteTagEx( [MarshalAs( UnmanagedType.LPStr )]string pszDataKey, short wExtraInfo, [MarshalAs( UnmanagedType.LPStr )]string pszData )
{
throw new NotImplementedException();
}
}