我有以下结构
typedef struct
{
char data1[10];
char data2[10];
AnotherStruct stData;
}MyData;
Run Code Online (Sandbox Code Playgroud)
由于某种原因,实现者选择不将stData作为指针,所以我必须忍受它.我的问题是如何检查stData成员是否为空?因为如果它是空的我需要跳过我的代码中的某些东西.
任何帮助表示赞赏
我对COM有一般的了解,并希望了解COM如何帮助进行数据传输.假设有两个进程,Process-A和Process-B,它们都希望彼此共享一些数据,当然有很多RPC机制,但我想使用COM.
以上是我的理解,你们中的任何人都可以帮助我清楚我对这个主题的理解吗?基本上我想在使用COM的两个进程之间共享一个数据结构
我有一个COM DLL,使用COM Inter-op的.NET应用程序使用它.在其中一个CoClasses中,有一个名为IT6TrackData的接口,它有一个名为TrackData的get属性
从IDL文件:
Interface IT6TrackData
{
[propget, id(1)] HRESULT TrackData([out, retval] SAFEARRAY(BYTE) *pVal);
}
Run Code Online (Sandbox Code Playgroud)
当查看上述IDL文件的TLB文件时,它将该属性显示为trackData(小写字母t)由于某种原因,客户端应用程序将此属性称为trackData,一切正常,直到现在.
作为增强功能的一部分,上面的接口已升级为具有put属性
Interface IT6TrackData
{
[propget, id(1)] HRESULT TrackData([out, retval] SAFEARRAY(BYTE) *pVal);
[propput, id(1)] HRESULT TrackData([in]SAFEARRAY(BYTE) pVal);
}
Run Code Online (Sandbox Code Playgroud)
现在,当查看上述IDL文件的TLB文件时,它将该属性显示为TrackData(t为大写),这打破了继续使用小写"t"引用trackData的旧.NET客户端.
我已经浏览了这篇知识库文章 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") …
Run Code Online (Sandbox Code Playgroud) 我有一个项目有很多COM dll,为了要求我必须取消注册COM Dll,我通过调用Regsvr32 -u
选项和dll未注册.
这种取消注册操作似乎删除了一个ICommon
接口,即接口,这使得其他COM对象无法使用.
此ICommon
接口由所有其他COM组件实现,在未注册的COM Dll的注册表脚本中,我没有看到任何删除此ICommon
接口表单注册表的代码,如何删除它.
如何删除给定的接口信息CoClass
,BEGIN_COM_MAP是否可以COM_INTERFACE_ENTRY
扮演任何角色?