• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 求一个vc控件返回数组给asp程序的例子

求一个vc控件返回数组给asp程序的例子

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了 求一个vc控件返回数组给asp程序的例子等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 求一个vc控件返回数组给asp程序的例子
描述:

求一个vc控件返回数组给asp程序的例子
希望能用 ATL ACTIVE SERVER PAGE CLASS 写一个 控件  传递一个数组给asp 
让asp通过方法 读取出来


解决方案1:

// VC
HRESULT isqtl([in] VARIANT x, [in] VARIANT y, [out, retval] VARIANT* out);
isqtl(VARIANT x, VARIANT y, VARIANT *out)
{
if (out == NULL)
return E_POINTER;
if (x.vt != (VT_VARIANT | VT_BYREF))
return E_INVALIDARG;
if (!(x.pvarVal->vt & VT_ARRAY))
return E_INVALIDARG;
if (y.vt != (VT_VARIANT | VT_BYREF))
return E_INVALIDARG;
if (!(y.pvarVal->vt & VT_ARRAY))
return E_INVALIDARG;
SAFEARRAY* pX = NULL;
SAFEARRAY* pY = NULL;
if (x.pvarVal->vt & VT_BYREF)
pX = *(x.pvarVal->pparray);
else
pX = x.pvarVal->parray;
if (y.pvarVal->vt & VT_BYREF)
pY = *(y.pvarVal->pparray);
else
pY = y.pvarVal->parray;
if (::SafeArrayGetDim(pX) != 1)
return E_INVALIDARG;
if (::SafeArrayGetDim(pY) != 1)
return E_INVALIDARG;
LONG LBound, UBound;
::SafeArrayGetLBound(pX, 1, &LBound);
::SafeArrayGetUBound(pX, 1, &UBound);
LONG Count = UBound - LBound + 1;
::SafeArrayGetLBound(pY, 1, &LBound);
::SafeArrayGetUBound(pY, 1, &UBound);
if ((UBound - LBound + 1) != Count)
return E_INVALIDARG;
vector<DOUBLE> vx;
vector<DOUBLE> vy;
_variant_t v;
VARIANT* pvData = NULL;
::SafeArrayAccessData(pX, (void**)&pvData);
for (LONG i=0; i<Count; ++i)
{
v = pvData[i];
v.ChangeType(VT_R8);
vx.push_back(v.dblVal);
}
::SafeArrayUnaccessData(pX);
::SafeArrayAccessData(pY, (void**)&pvData);
for (i=0; i<Count; ++i)
{
v = pvData[i];
v.ChangeType(VT_R8);
vy.push_back(v.dblVal);
}
::SafeArrayUnaccessData(pY);
v.Clear();
v.vt = VT_VARIANT | VT_ARRAY;
v.parray = ::SafeArrayCreateVector(VT_VARIANT, 0, 8);
VARIANT* pd = NULL;
::SafeArrayAccessData(v.parray, (void**)&pd);
pd[0] = _variant_t(vx[0]).Detach();
pd[1] = _variant_t(vx[1]).Detach();
pd[2] = _variant_t(vy[0]).Detach();
pd[3] = _variant_t(vy[1]).Detach();
pd[4] = _variant_t(vy[2]).Detach();
pd[5] = _variant_t(vy[0]).Detach();
pd[6] = _variant_t(vy[1]).Detach();
pd[7] = _variant_t(vy[2]).Detach();
::SafeArrayUnaccessData(v.parray);
*out = v.Detach();
return S_OK;
}
//我直接取X的前两个,重复取Y的前三位返回,具体的自己写吧。
//应该还有错误处理,我省了。
========================================================================
//asp
  Dim obj
  set obj = CraeteObject(...)
  Dim a(4)
  For I = 0 To 4
     a(I) = I + 1
  Next
  Dim b(4)
  For I = 0 TO 4
     b(I) = I * I
  Next
  
  dim Sum
  Sum = obj.isqtl(a, b)
  if (IsArray(sum)) Then
for j = LBound(sum) To UBound(sum)
Response.Write CStr(sum(j)) & "<BR>"
Next
  End if

解决方案2:

HRESULT GetArray(VARIANT* pVal)
{ 
    LONG Count;
    _variant_t v;
    v.vt = VT_VARIANT | VT_ARRAY;
    v.parrsy = ::SafeArrayCreateVector(VT_VARIANT, 0, Count);
    //填写数据
    //...
    *pVal = v.Detach();
    return S_OK;
}


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2017-06-05 子线程退出时出错
  • 2017-06-04 一道高深的问题,急!!!
  • 2017-06-04 求助::::::::::
  • 2017-06-04 初学COM,征集方案:你会怎么设计下面的组件和接口?
  • 2017-06-04 求助:自己制作播放器问题ActiveX
  • 2017-06-04 ocx控件调用问题
  • 2017-06-04 Atl怎么支持拖放?
  • 2017-06-05 关于两个线程的问题
  • 2017-06-04 如何改变ActiveX的初始大小?
  • 2017-06-05 Activex控件如何注入别人的电脑?

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • VC下编写ATL控件时,可以用对文件进行操作吗
    • 高分请教高手:哪怕给点提示!
    • 大哥我导入一个ocx出错可否找导一下。
    • 实现网络视频播放页的小窗口播放
    • 有个windows桌面窗口的问题请教下
    • 在服务器端运行组件
    • dll中可以用定时器吗??
    • 关于鼠标钩子得问题
    • 动态连接库文件dll,lib能解开吗?
    • 如何在控件中显示GIF文件?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有