如 SendSomeReq(struct myStruct& aparam);
activex中可以暴露出这样的方法接口吗?
因为struct包含一定量的数据,所以拆开来分开传递很麻烦,意思也乱套了。
所以请教各位有经验的朋友。
7 个解决方案
#1
在.odl文件中加上结构定义,如下:
importlib(STDOLE_TLB);
importlib(STDTYPE_TLB);
//以下为我添加的MyStruct结构定义
typedef[
uuid(6B87C9FE-4236-4e42-B784-FC6F40BCF6FA),
helpstring("my struct")
]
struct tagMyStruct
{
long x;
long y;
}MyStruct;
定义VARIANT类型的属性TestX,以下是我定义的SetTestX
void CTadCtrl::SetTestX(const VARIANT FAR& newValue)
{
// TODO: Add your property handler here
COleVariant ar(newValue);
if(ar.vt == VT_RECORD){
IRecordInfo* pri = ar.pRecInfo;
PVOID pMyStruct = ar.pvRecord;
COleVariant v1;
COleVariant v2;
pri->GetField(pMyStruct, L"x", &v1);
pri->GetField(pMyStruct, L"y", &v2);
int x = 0; int y = 0;
if(v1.vt == VT_I4){
x = v1.lVal;
}
if(v2.vt == VT_I4){
y = v1.lVal;
}
}
SetModifiedFlag();
}
GetTestX没兴趣写了
在VB中调用代码如下
Dim n As MyStruct
n.x = 10
n.y = 20
Tad1.TestX = n
请参考如下文章
http://www.mvps.org/vcfaq/com/4.htm
http://comcamp.diy.myrice.com/techarticles/com/2003.htm
您也可以在网上搜索关于自定义结构的其它文章
importlib(STDOLE_TLB);
importlib(STDTYPE_TLB);
//以下为我添加的MyStruct结构定义
typedef[
uuid(6B87C9FE-4236-4e42-B784-FC6F40BCF6FA),
helpstring("my struct")
]
struct tagMyStruct
{
long x;
long y;
}MyStruct;
定义VARIANT类型的属性TestX,以下是我定义的SetTestX
void CTadCtrl::SetTestX(const VARIANT FAR& newValue)
{
// TODO: Add your property handler here
COleVariant ar(newValue);
if(ar.vt == VT_RECORD){
IRecordInfo* pri = ar.pRecInfo;
PVOID pMyStruct = ar.pvRecord;
COleVariant v1;
COleVariant v2;
pri->GetField(pMyStruct, L"x", &v1);
pri->GetField(pMyStruct, L"y", &v2);
int x = 0; int y = 0;
if(v1.vt == VT_I4){
x = v1.lVal;
}
if(v2.vt == VT_I4){
y = v1.lVal;
}
}
SetModifiedFlag();
}
GetTestX没兴趣写了
在VB中调用代码如下
Dim n As MyStruct
n.x = 10
n.y = 20
Tad1.TestX = n
请参考如下文章
http://www.mvps.org/vcfaq/com/4.htm
http://comcamp.diy.myrice.com/techarticles/com/2003.htm
您也可以在网上搜索关于自定义结构的其它文章
#2
谢谢xiaoqiqixiao(七七)
可是您说的或者介绍的方法都是适用于IDispatch 接口的activex吧,对于用dispinterface说明的接口可以用这种方法吗?
也就是说对于用ATL生成的activex控件可以用这种方法,对于MFC生成的activex可行吗?
如果不行的话,有什么变通的方法可以传递这些值呢,当然函数的参数不要增加太多才好。
可是您说的或者介绍的方法都是适用于IDispatch 接口的activex吧,对于用dispinterface说明的接口可以用这种方法吗?
也就是说对于用ATL生成的activex控件可以用这种方法,对于MFC生成的activex可行吗?
如果不行的话,有什么变通的方法可以传递这些值呢,当然函数的参数不要增加太多才好。
#3
我本来就是MFC下的控件的
ATL下是.idl
MFC下才是.odl
不知道你的客户端是什么,在VB下我试过可行
ATL下是.idl
MFC下才是.odl
不知道你的客户端是什么,在VB下我试过可行
#4
我是要做一个ocx给vc++环境下的程序使用
你的函数SetTestX(const VARIANT FAR& newValue)解析起来看起来不是很麻烦,
在客户端组织数据应该有些麻烦吧?
你的函数SetTestX(const VARIANT FAR& newValue)解析起来看起来不是很麻烦,
在客户端组织数据应该有些麻烦吧?
#5
VC下的话,就没必要这么麻烦了
你用SafeArray吧,将你的结构转成数组,再变成SafeArray,就可以了,不过参数也是VARIANT的
用VC本来就复杂的,您将就点吧
你用SafeArray吧,将你的结构转成数组,再变成SafeArray,就可以了,不过参数也是VARIANT的
用VC本来就复杂的,您将就点吧
#6
现在搞清楚了,这个ocx是给html网页上用的,好像是用javascrip语言,这样的合作还从来没搞过。
我们的这个控件不仅要传递自定义结构数据,还要传递出去大量的二进制数据(比如好几个结构数据再加上其他的说明性数据等等)。
看了msdn上说的,如果server与client都是32位系统的话,也可以以BSTR数据传送,或者传递出去一个指针和长度,让client按照进行规定的法则解析,也样是不是也行?
因为我不想用SafeArray以及VARIANT等复杂的东西。
另外,在javascrip语言里,传递进来或者出去一个指针,数据能按地址取出来么?我这方面不懂,外行。请再帮忙。
我们的这个控件不仅要传递自定义结构数据,还要传递出去大量的二进制数据(比如好几个结构数据再加上其他的说明性数据等等)。
看了msdn上说的,如果server与client都是32位系统的话,也可以以BSTR数据传送,或者传递出去一个指针和长度,让client按照进行规定的法则解析,也样是不是也行?
因为我不想用SafeArray以及VARIANT等复杂的东西。
另外,在javascrip语言里,传递进来或者出去一个指针,数据能按地址取出来么?我这方面不懂,外行。请再帮忙。
#7
up
#1
在.odl文件中加上结构定义,如下:
importlib(STDOLE_TLB);
importlib(STDTYPE_TLB);
//以下为我添加的MyStruct结构定义
typedef[
uuid(6B87C9FE-4236-4e42-B784-FC6F40BCF6FA),
helpstring("my struct")
]
struct tagMyStruct
{
long x;
long y;
}MyStruct;
定义VARIANT类型的属性TestX,以下是我定义的SetTestX
void CTadCtrl::SetTestX(const VARIANT FAR& newValue)
{
// TODO: Add your property handler here
COleVariant ar(newValue);
if(ar.vt == VT_RECORD){
IRecordInfo* pri = ar.pRecInfo;
PVOID pMyStruct = ar.pvRecord;
COleVariant v1;
COleVariant v2;
pri->GetField(pMyStruct, L"x", &v1);
pri->GetField(pMyStruct, L"y", &v2);
int x = 0; int y = 0;
if(v1.vt == VT_I4){
x = v1.lVal;
}
if(v2.vt == VT_I4){
y = v1.lVal;
}
}
SetModifiedFlag();
}
GetTestX没兴趣写了
在VB中调用代码如下
Dim n As MyStruct
n.x = 10
n.y = 20
Tad1.TestX = n
请参考如下文章
http://www.mvps.org/vcfaq/com/4.htm
http://comcamp.diy.myrice.com/techarticles/com/2003.htm
您也可以在网上搜索关于自定义结构的其它文章
importlib(STDOLE_TLB);
importlib(STDTYPE_TLB);
//以下为我添加的MyStruct结构定义
typedef[
uuid(6B87C9FE-4236-4e42-B784-FC6F40BCF6FA),
helpstring("my struct")
]
struct tagMyStruct
{
long x;
long y;
}MyStruct;
定义VARIANT类型的属性TestX,以下是我定义的SetTestX
void CTadCtrl::SetTestX(const VARIANT FAR& newValue)
{
// TODO: Add your property handler here
COleVariant ar(newValue);
if(ar.vt == VT_RECORD){
IRecordInfo* pri = ar.pRecInfo;
PVOID pMyStruct = ar.pvRecord;
COleVariant v1;
COleVariant v2;
pri->GetField(pMyStruct, L"x", &v1);
pri->GetField(pMyStruct, L"y", &v2);
int x = 0; int y = 0;
if(v1.vt == VT_I4){
x = v1.lVal;
}
if(v2.vt == VT_I4){
y = v1.lVal;
}
}
SetModifiedFlag();
}
GetTestX没兴趣写了
在VB中调用代码如下
Dim n As MyStruct
n.x = 10
n.y = 20
Tad1.TestX = n
请参考如下文章
http://www.mvps.org/vcfaq/com/4.htm
http://comcamp.diy.myrice.com/techarticles/com/2003.htm
您也可以在网上搜索关于自定义结构的其它文章
#2
谢谢xiaoqiqixiao(七七)
可是您说的或者介绍的方法都是适用于IDispatch 接口的activex吧,对于用dispinterface说明的接口可以用这种方法吗?
也就是说对于用ATL生成的activex控件可以用这种方法,对于MFC生成的activex可行吗?
如果不行的话,有什么变通的方法可以传递这些值呢,当然函数的参数不要增加太多才好。
可是您说的或者介绍的方法都是适用于IDispatch 接口的activex吧,对于用dispinterface说明的接口可以用这种方法吗?
也就是说对于用ATL生成的activex控件可以用这种方法,对于MFC生成的activex可行吗?
如果不行的话,有什么变通的方法可以传递这些值呢,当然函数的参数不要增加太多才好。
#3
我本来就是MFC下的控件的
ATL下是.idl
MFC下才是.odl
不知道你的客户端是什么,在VB下我试过可行
ATL下是.idl
MFC下才是.odl
不知道你的客户端是什么,在VB下我试过可行
#4
我是要做一个ocx给vc++环境下的程序使用
你的函数SetTestX(const VARIANT FAR& newValue)解析起来看起来不是很麻烦,
在客户端组织数据应该有些麻烦吧?
你的函数SetTestX(const VARIANT FAR& newValue)解析起来看起来不是很麻烦,
在客户端组织数据应该有些麻烦吧?
#5
VC下的话,就没必要这么麻烦了
你用SafeArray吧,将你的结构转成数组,再变成SafeArray,就可以了,不过参数也是VARIANT的
用VC本来就复杂的,您将就点吧
你用SafeArray吧,将你的结构转成数组,再变成SafeArray,就可以了,不过参数也是VARIANT的
用VC本来就复杂的,您将就点吧
#6
现在搞清楚了,这个ocx是给html网页上用的,好像是用javascrip语言,这样的合作还从来没搞过。
我们的这个控件不仅要传递自定义结构数据,还要传递出去大量的二进制数据(比如好几个结构数据再加上其他的说明性数据等等)。
看了msdn上说的,如果server与client都是32位系统的话,也可以以BSTR数据传送,或者传递出去一个指针和长度,让client按照进行规定的法则解析,也样是不是也行?
因为我不想用SafeArray以及VARIANT等复杂的东西。
另外,在javascrip语言里,传递进来或者出去一个指针,数据能按地址取出来么?我这方面不懂,外行。请再帮忙。
我们的这个控件不仅要传递自定义结构数据,还要传递出去大量的二进制数据(比如好几个结构数据再加上其他的说明性数据等等)。
看了msdn上说的,如果server与client都是32位系统的话,也可以以BSTR数据传送,或者传递出去一个指针和长度,让client按照进行规定的法则解析,也样是不是也行?
因为我不想用SafeArray以及VARIANT等复杂的东西。
另外,在javascrip语言里,传递进来或者出去一个指针,数据能按地址取出来么?我这方面不懂,外行。请再帮忙。
#7
up