• 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 > ActiveX中大数据块传输问题!

ActiveX中大数据块传输问题!

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

佚名通过本文主要向大家介绍了 ActiveX中大数据块传输问题!等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: ActiveX中大数据块传输问题!
描述:

我现在有一个ActiveX控件,我要从一个控件中导出一个特别大的数组该怎么做?(不用文件方式,是直接用内存导出!)
                                     
                                                    请各位大侠指教。 谢谢!


解决方案1:

VARIANT myVar;
myVar.vt = VT_CY;
// put 15.15 into the currency variant.
CURRENCY myValue;
myValue.Hi = 0;
myValue.Lo = (LONG)(15*10000 + 1537); // set the value to $15.15;
myVar.cyVal = myValue;
//or
myValue.int64 = (151234);
myVar.cyVal = myValue;
//Now get the value from a float and put it into the currency.
float myMoney = (float)5.37;
myVar.vt = VT_R4;
myVar.fltVal = myMoney;
//no loss of precission.
VariantChangeType(&myVar, &myVar, 0, VT_CY);
//Now get the value from a String
USES_CONVERSION;
myVar.bstrVal = SysAllocString(L"23.4345");
myVar.vt = VT_BSTR;
VariantChangeType(&myVar, &myVar, 0, VT_CY);
//Finally output a currency to a string.
myVar.cyVal.int64 += myVar.cyVal.int64; // + myVar.cyVal;
VariantChangeType(&myVar, &myVar, 0, VT_BSTR);
}
void CVarUseDlg::OnStrings() 
{
//Create a BSTR and assign it to a Variant
BSTR x = SysAllocString(L"Hello");
VARIANT myVariant;
myVariant.vt = VT_BSTR;
myVariant.bstrVal = x;
SysFreeString(x);
//Create a CString and change it to a variant;
CString myCString(_T("My String"));
CString mySecondString;
//This is required to use the T2COLE macro.
USES_CONVERSION;
BSTR y = SysAllocString(T2COLE(myCString));
myVariant.bstrVal = y;
mySecondString = y;
SysFreeString(y);
_bstr_t str2="hjljljl";
char *str1 = (char*)str2;//char*是_bstr_t类的一个重载
CString str3=str1;
//Create two BSTRs and add them.
BSTR a = SysAllocString(L"One two ");
BSTR b = SysAllocString(L"three four.");
_bstr_t my_bstr_t(a, TRUE);
my_bstr_t += b;
myVariant.bstrVal = my_bstr_t;
// or
myVariant.bstrVal = _bstr_t(a, FALSE) + b;
//Change a bstr to a CString.
CString ANewString(b);
//or if CString already exists.
myCString = b;
//Use of CComBSTR
CComBSTR myCComBSTR(L"Hello");
myCComBSTR.Append(L", how are you?");
VARIANT varFromCCom;
varFromCCom.vt = VT_BSTR;
varFromCCom.bstrVal = myCComBSTR;
}
void CVarUseDlg::OnBasic() 
{
//create a variant of the character 'c'
VARIANT varC;
varC.vt=VT_UI1;
varC.cVal = 'c';
//create a variant of the short 12
VARIANT varS;
varS.vt = VT_I2;
varS.iVal = 12;
//create a variant of the long 1234567;
VARIANT varL;
varL.vt = VT_I4;
varL.lVal = 1234567;
}
void CVarUseDlg::OnSafeArray() 
{
//Create a standard array;
int* pMyOriginalArray = new int[100];
for(int count = 0; count < 100; count++) pMyOriginalArray[count] = count;
//Now get ready to put it into a safe array
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 = 100; //and has 100 elements.
//create the array
SAFEARRAY FAR* pMySafeArray;
pMySafeArray = SafeArrayCreate(VT_UI1, 1, rgsabound); //create the array of 4byte integers, one dimension
 //with the bounds stored in rgsabound.
//now access the safe array's data.
int* pData;
hr = SafeArrayAccessData(  pMySafeArray, (void**)&pData); //Get a pointer to the data.
//copy the 400 bytes of data from our old array to the new one.
memcpy(pData, pMyOriginalArray, 400);
//here we verify to you that the data is correct.
for(count = 0; count < 100; count++) ASSERT(pData[count] == pMyOriginalArray[count]);
SafeArrayUnaccessData(pMySafeArray);
VARIANT myVariant; 
myVariant.parray = pMySafeArray;
myVariant.vt = VT_ARRAY|VT_UI1; // state it's an array and what type it holds.
//To put the SafeArray in a Variant
//pass the Variant to a function call.
FunctionCallWithVariant(myVariant);


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

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

相关文章

  • 2017-06-05 在view里面设置对话框中combox的默认值
  • 2017-06-04 为什么我的ATL控件中的弹出菜单项处理函数不响应?
  • 2017-06-04 ActiveX在注册表里那些是必须存在的键/值
  • 2017-06-05 关于COM、OLE的永久存储的一个小问题
  • 2017-06-04 如何在VC中使用WORD的com组件
  • 2017-06-05 不是我小器,实在是一分也没了,等有分了再给您补上
  • 2017-06-04 OLE对象的删除
  • 2017-06-04 获取页面上某点的颜色web开发(高手请进)讨论讨论
  • 2017-06-04 组件数据存储
  • 2017-06-05 这个问题,一个星期没搞定。求高手。

文章分类

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

最近更新的内容

    • 请问IE会在什么时机调用BHO的IObjectWithSite接口的GetSite方法?
    • 请问系统服务Service程序里是否不可以使用CreateProcess,我调用了好像没有反应
    • BSTR分配了内存吗?
    • 100分解决多线程通信服务端中的内存问题,急!
    • 在COM方法中怎样使用有缺省值参数?
    • VC封装OCX控件,原控件的事件丢失
    • 请教个基础然而重要函数返回值问题
    • 在com+中如何在各层之间传递自定义数据
    • 问三个问题,都是与IE有关的。
    • 请问如何在IRP_MN_START_DEVICE阻止usbstor驱动的加载

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

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