ActiveX控件的接口如何返回一个自定义的类型.

yaoyuhang 2004-04-20 08:39:14
如题. 简单问题.
我看了在ATL工程中如何让一个接口返回一个自定义的数据类型(比如结构).

现在我想在ActiveX工程中让一个接口返回一个结构类型.不知道如何来作.可能和ATL的类似.但我太笨了就是没有照搬过来.

请赐教.
...全文
104 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
yaoyuhang 2004-05-08
  • 打赏
  • 举报
回复
问题解决了
谢谢各位.
wangweixing2000 2004-04-28
  • 打赏
  • 举报
回复
{
Mystuct m_struct[10]; //Mystuct 自定义结构
for(int i=0;i<10;i++)
{
m_struct[i].x=(float)i;
m_struct[i].y=(float)i;
m_struct[i].z=(float)i;
m_struct[i].w='x';
}
HRESULT hr;
//create an array bound
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound = 0; //The first (and only) collumn of our array starts at 0.
rgsabound[0].cElements = 10; //and has 100 elements.

//create the array
SAFEARRAY FAR* pMySafeArray;
pMySafeArray = SafeArrayCreate(VT_VARIANT, 1, rgsabound);
Mystuct *pData;
hr = SafeArrayAccessData( pMySafeArray, reinterpret_cast<PVOID*>(&pData)); //Get a pointer to the data.


//copy the bytes of data from our old array to the new one.
memcpy(pData, m_struct, 10*sizeof(Mystuct));
for(int i = 0; i < 10; i++) ASSERT(pData[i].x == m_struct[i].x);
SafeArrayUnaccessData(pMySafeArray);


//To put the SafeArray in a Variant
VARIANT myVariant;
myVariant.parray = pMySafeArray;
myVariant.vt = VT_ARRAY;
SafeArrayUnaccessData(myVariant.parray); //然后把myVariant传出去就可以了
starwillis 2004-04-28
  • 打赏
  • 举报
回复
gz
xubin_sh 2004-04-27
  • 打赏
  • 举报
回复
还是返回variant,包含variant数组来得容易
ygang76 2004-04-27
  • 打赏
  • 举报
回复
同意humanNew(新人类),最好用一个类,实现IDispatch接口,然后通过IDispatch接口访问
yaoyuhang 2004-04-27
  • 打赏
  • 举报
回复
up
yaoyuhang 2004-04-26
  • 打赏
  • 举报
回复
up
firmbird 2004-04-23
  • 打赏
  • 举报
回复
因为系统提供的自动化汇集机制不支持自定义的结构,所以VB是没法用的,除非你自己提供汇集接口,这个比较麻烦的,可以看一下MSDN上的讲述
Taking Advantage of the Automation Marshaller
yaoyuhang 2004-04-22
  • 打赏
  • 举报
回复
自己up
yaoyuhang 2004-04-22
  • 打赏
  • 举报
回复
问题基本解决
但新的问题如下
ActiveX控件中一个接口返回一个结构类型.其中一个元素是BSTR 在C#中实例化该结构没有问题.但在vb中出现类型不能自动化的问题.
在ActiveX中的odl中import "myStruct.idl"

myStruct.idl
typedef struct info
{
BSTR str;
BSTR str2;
}info;

http://expert.csdn.net/Expert/topic/2997/2997237.xml?temp=.8377802
yaoyuhang 2004-04-21
  • 打赏
  • 举报
回复
能不能说的具体点 这是我第一个com工程

你说的结构接口该如何定义.
humanNew 2004-04-21
  • 打赏
  • 举报
回复
返回接口指针,使用LPDISPATCH
yaoyuhang 2004-04-21
  • 打赏
  • 举报
回复
自己up

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧