如题,也就是再Ctrl类中,thankyou 了先!
不是ATL啊!
不是ATL啊!
解决方案 »
- settimer 和 线程有区别吗!
- 最近想做个项目,大伙给个建议
- ORGE的编译问题??
- 高手请教,想用键盘模拟手柄,一台机子上用两个键盘而不冲突
- VC的SDK SDK编程中,不知"句柄"与"ID号" 有何区别........
- 请问各位朋友……
- 谁能告我用UDP协议编写C/S的大体步骤?
- 最近在看ATL Internals,后半部分开始迷糊了,问各位哪里有学ATL的书资料,我以前看过Inside Com,和一些Com编成的书,
- 下面这一段代码怎么使用,需要包含哪些文件,DDK下用什么方式编译
- 今天看了一个关于 1/3 为什么等于 0.333... 的帖子,受益匪浅,不敢独享。
- 在对话框中弹出对话框的问题
- 一个问题 关于输出字符串
选中右健添加方法。
此时即使我在idl中定义了Struct应该也还是不形吧!
那个SafeArray难看得一米多高的!
ys.aa = ...;
BSTR bstr = SysAllocStringByteLen((char*)&ys, sizeof(ys));
谢谢了!立刻结贴给分!
如何将BSTR类型转化为CYourStruct类型呢?
55!
CYourStruct ys;
memcpy(&ys, (LPVOID)bstr, sizeof(ys));
我是VC新手,希望大家可以告诉下:
以上的自定义结构是否可以用指针来传,是否可以,应该怎么做?
还有就是我想问一下,MFC ActiveX和ATL究竟有多大的区别呢?
是否就仅仅是MFC支持类库,比较大;而ATL比较小,这样的话,如果我的ActiveX用到很多Form是不是就应该用MFC了。
还有如果MFC ActiveX和ATL对象混用,会产生什么样的恶果呢?谢谢了!
{
Double x;
Double y;
}EDPoint;
EDPoint tmpPoint;
一、 BSTR方式传递自定义结构体参数;
1. 如何从BSTR转化为EDPoint:
memcpy(&tmpPoint, (LPVOID)bstr, sizeof(tmpPoint));
2. 如何从EDPoint转化为BSTR;
BSTR bstr = SysAllocStringByteLen((char*)& tmpPoint, sizeof(tmpPoint));
二、 BYTE流方式传递自定义结构体参数;
1. 如何从BYTE流转化为EDPoint;
PBYTE bOut[Max];
EDPoint tmpPoint;
Memset(&tmpPoint,0,sizeof(tmpPoint));
Memcpy((LPVOID)& tmpPoint,&bOut,sizeof(tmpPoint));
----memset( &tData, 0, sizeof(ATTRINFO) );
----memcpy( &tData, pIn, sizeof(ATTRIINFO) ); 2. 如何从EDPoint转化为BYTE流;
Memset(&bOut,0,Max);
Memcpy(&bOut,(LPVOID)& tmpPoint,sizeof(tmpPoint));
三、 Variant方式传递自定义结构体参数;
初始化:
EDPoint * tmpPoint = NULL;
VARIANT tmpVar;
tmpPoint =(EDPoint*)CoTaskMemAlloc(sizeof(EDPoint));
1. 如何从Variant转化为EDPoint:
tmpPoint = (EDPoint*) tmpVar.byref;2. 如何从EDPoint转化为Variant:
tmpVar.byref =(LPVOID) tmpPoint;
结束:
CoTaskMemFree((LPVOID) tmpVar);不过都觉得太过繁了,大家帮忙整个简单的哈!
我如果在外面需要调用需要先将EDPoint转换成BSTR、BYTE..返回后又得转过来,太累了!
指针是如何做的呢?
template<class T>
class CBSTR
{
protected:
BSTR bstr;
T* pT;public:
CBSTR() : bstr(NULL), pT(NULL) {}
CBSTR(const T& other)
{
bstr = ::SysAllocStringByteLen((char*)&other, sizeof(T));
pT = &other;
}
CBSTR(BSTR obstr)
{
bstr = obstr;
pT = (T*)obstr;
} ~CBSTR()
{
if (bstr)
{
::SysFreeString(bstr);
bstr = NULL;
}
pT = NULL;
} operator BSTR() { return bstr; }
operator T*() { return pT; }
};CBSTR<EDPoint> bstred(empPoint);
pInterface->MethodIn((BSTR)bstred, ...);BSTR outbstr = NULL;
pInterface->MethodOut(&outbstr);
CBSTR<EDPoint> bstred2(outbstr);
EdPoint* pedp = bstred2;
pedp->x;
pedp->y;