社区
ATL
帖子详情
关于VARIANT 变量的运算的问题
六月初七
2014-04-03 03:55:25
网上看到一个例子中:
VARIANT size,out;
Variantint(&size);
Variantint(&out);
........
后面要显示结果数据时,
strtext.Format(%.f”,(XXX+i*m_size+j));
要实现out值与(i*m_size+j)相加,显示结果,XXX要填什么呢?
...全文
153
3
打赏
收藏
关于VARIANT 变量的运算的问题
网上看到一个例子中: VARIANT size,out; Variantint(&size); Variantint(&out); ........ 后面要显示结果数据时,strtext.Format(%.f”,(XXX+i*m_size+j)); 要实现out值与(i*m_size+j)相加,显示结果,XXX要填什么呢?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
六月初七
2014-04-04
打赏
举报
回复
引用 1 楼 oyljerry 的回复:
out.dblVal
调用动态链接库程序中,这句话是什么意思呢? strtext.Format("%.f",*(mxGetPr(out)+i*m_size+j)); 其中变量的定义如下: UpdateData(TRUE); double data; data=double(m_size); mxArray *size; //输入参数 mxArray *out=NULL; //输出参数 //创建mxArray数据对象,双精度标量 size=mxCreateDoubleScalar(data); //内存复制赋值 memcpy(mxGetPr(size),&data,1*sizeof(double)); mlfMypascal(1,&out,size);//函数调用 Mypascal函数的功能貌似是生成一个矩阵,矩阵首行首列都为1,其余位置的值等于其左边和上边紧挨着的数据的和 如上图
六月初七
2014-04-03
打赏
举报
回复
引用 1 楼 oyljerry 的回复:
out.dblVal
好像不对。
CString strtext;
int i,j;
//清除已显示的数据
m_List.DeleteAllItems();
intncolumn=m_List.GetHeaderCtrl()->
GetItemCount();
for (i=0;i<ncolumn;i++) m_List.DeleteColumn(0);
//设置标题栏
m_List.InsertColumn(0," ");//附空值
m_List.SetColumnWidth(0,60);//设置每栏宽度
for (i=0;i<m_size;i++)
{
strtext.Format("Column %d",i+1);
m_List.InsertColumn(i+1,strtext);
m_List.SetColumnWidth(i+1,60);
}
//显示结果数据
for (i=0;i<m_size;i++)
{
strtext.Format("Row %d",i+1);
m_List.InsertItem(i+1,strtext);
for(j=0;j<m_size;j++)
{
strtext.Format("%.f",*(
mxGetPr(out)
+i*m_size+j));
m_List.SetItemText(i,j+1,strtext);
}
}
把红色部分替换掉结果应该是这样:
oyljerry
2014-04-03
打赏
举报
回复
out.dblVal
DELPHI
Variant
变量
的使用技巧
delphi 为了完全支持OLE,32位Delphi 增加了
Variant
数据类型,本节将从宏观角度来分析这种数据类型。实际上,
Variant
类型对Pascal语言有普遍而深入的影响,Delphi 控件库中与OLE 无关的地方也使用到这种类型。
Variant
变量
没有类型 一般说来,你可以用
Variant
变量
存储任何数据类型,对它执行各种操作和类型转换。需要注意的是:这违反了Pascal 语言的一贯原则,有悖于良好的编程习惯。
variant
变量
的类型检查和计算在运行期间才进行,编译器不会提示代码中的潜在错误,这些错误在进一步测试中才能发现。总之,你可以认为包含
variant
变量
的代码是解释性代码,正如解释性代码一样,许多操作直到执行时才能知道,这对代码运行速度会有很大的影响。 上面对
Variant
类型的使用提出了警告,现在来看看
Variant
类型究竟能干什么。基本上说,如果声明了一个
variant
变量
: var V:
Variant
; 你就可以把各种不同类型的值赋给它: V := 10; V := 'Hello, World'; V := 45.55; 一旦得到一个
variant
值,你可以把它拷贝给任何兼容或不兼容的数据类型。如果你把值赋给不兼容的数据类型,Delphi 会力尽所能进行转换,无法转换则颁布一个运行时间错误。实际上,
variant
变量
中不仅包含了数据还包含有类型信息,并允许一系列运行时间操作,这些操作很方便,但运行速度慢且安全性差。 见例VariTest,它是上面代码的扩展。窗体上有三个编辑框,一对按钮,第一个按钮的OnClick 事件代码如下: procedure TForm1.Button1Click(Sender: TObject); var V:
Variant
; begin V := 10; Edit1.Text := V; V := 'Hello, World'; Edit2.Text := V; V := 45.55; Edit3.Text := V; end; 很有趣是不是?你可以把一个值为字符串的
variant
变量
赋给编辑框Text 属性,还可以把值为整数或浮点数的
variant
变量
赋给Text属性。正如你在图10.1中所看到的,一切正常。 (图10.1)按Assign按钮后,例VariTest的输出结果 图 10.1: 例 VariTest 的 Assign 按钮 Click 事件输出结果 更糟糕的是:你还可以用
variant
变量
计算数值,从第二个按钮的Click事件代码就可看到这一点: procedure TForm1.Button2Click(Sender: TObject); var V:
Variant
; N: Integer; begin V := Edit1.Text; N := Integer(V) * 2; V := N; Edit1.Text := V; end; 至少这种代码带有一定危险性,如果第一个编辑框包含了一个数字,那么一切运行正常;如果不是,将会引发异常。这里再重申一遍,如果不到万不得以,不要随便使用
Variant
类型,还是应坚持使用传统的Pascal 数据类型和类型检查方法。在Delphi 和 VCL中,
variant
变量
主要是用于 OLE 支持和数据库域的访问。
Variant
类型内部结构 Delphi中定义了一个
variant
记录类型,TVarData,它与
Variant
类型有相同的内存布局。你可以通过TVarData访问
variant
变量
的实际类型。TVarData 结构中包含了
Variant
类型信息(由Vtype域表示)、一些保留域及当前值。 VType域的取值包括OLE 自动化中的所有数据类型,这些类型通常叫OLE 类型或
variant
类型。以下是
variant
类型的完整列表,按字母顺序排列: varArray varBoolean varByRef varCurrency varDate varDispatch varDouble varEmpty varError varInteger varNull varOleStr varSingle varSmallint varString varTypeMask varUnknown var
Variant
你可以在Delphi 帮助系统的
variant
s 主题下找到这些类型的说明。 还有许多操作
variant
变量
的函数,你可以用它们进行特定的类型转换,或通过它们获取
variant
变量
的类型信息(例如VarType 函数),当你用
variant
变量
写表达式时,Delphi会自动调用这些类型转换和赋值函数。另外还有操作
variant
数组的例程,你可以通过帮助文件的
Variant
support routines 主题了解相关内容。
Variant
类型运行很慢!
Variant
类型代码运行很慢,不仅数据类型转换如此,两个值为整数的
Variant
变量
相加也是如此。它们几乎跟Visual Basic这种解释性代码一样慢!为了比较
Variant
变量
和整型
变量
的运行速度,请看例VSpeed 。 程序中设置了一个循环,记录运行时间并在进程条中显示运行状态。下面是基于
variant
类型的一段代码,基于整型的代码与此相似: procedure TForm1.Button1Click(Sender: TObject); var time1, time2: TDateTime; n1, n2:
Variant
; begin time1 := Now; n1 := 0; n2 := 0; ProgressBar1.Position := 0; while n1 < 5000000 do begin n2 := n2 + n1; Inc (n1); if (n1 mod 50000) = 0 then begin ProgressBar1.Position := n1 div 50000; Application.ProcessMessages; end; end; // we must use the result Total := n2; time2 := Now; Label1.Caption := FormatDateTime ( 'n:ss', Time2-Time1) + ' seconds'; end; 记时这段代码值得一看,因为你可以把它用到任何类型的性能测试中。正如你所看到的,程序用Now 函数获取当前的时间,用FormatDateTime 函数格式化时间差,输出结果以分("n")和秒("ss")表示。除此之外,你可以用Windows API的GetTickCount 函数,该函数能精确显示操作系统启动后至当前的毫秒数。 从上例可见两者的速度差异非常之大,以至于不用精确记时也能看到这种差异。图10.2是在本人计算机上运行程序看到的结果。当然运行结果取决于运行程序的计算机,但是两者的数值比不会有太大变化。
2015年计算机二级考试复习重点.pdf
2015年计算机二级考试复习重点.pdf
Excel-VBA宏编程实例源代码-转换
Variant
类型的引数.zip
Excel-VBA宏编程实例源代码-转换
Variant
类型的引数.zip
《ASP网络程序设计》实验指导书(网站建设与维护&网络程序设计)
网站建设与维护&网络程序设计 实验指导书 实验二 VBScript程序设计 一、实验目的及要求 1.了解并掌握VBScript脚本程序设计语言的基本语法知识及简单程序设计方法; 2.熟练掌握ASP环境中的输出方法; 3.熟练掌握VBScript的If语句和Select Case语句的编程技术; 4.熟练掌握VBScript的For…Next、Do…Loop和For each…In等循环语句的编程技术; 二、实验内容 ⒈ 利用VBScript在网页中输出当前的时间和日期。 ⒉ 上机验证教材上的VBScript各个函数的功能,熟悉其用法。 ⒊ 上机验证教材上的例3-1至例3-8。 ⒋ 试用VBScript编程,实现计算并输出1到10的阶乘之和。 ⒌ 试用VBScript编程,实现计算并输出100到500的之间的水仙花数(水仙花数是指该数的值等于各位数字的立方和)。 ⒍ 试用VBScript编程,利用数组实现矩阵乘法。 三、实验指导 (一)VBScript函数 函数是一种特定的
运算
,在程序中要使用一个函数时,只要给出函数名并给出一个或多个参数,就能得到它的函数值。 VBScript内部函数可分为:转换函数、字符串函数、日期和时间函数、数学函数和检验函数。 1.转换函数 VBScript对
Variant
变量
一般会根据需要自动转换成合适的数据类型;但有时,自动转换有可能造成数据类型不匹配错误。此时,就应使用VBScript的转换函数来强制转换数据的子类型。 常用的转换函数见下表: 函数功能 CStr(
Variant
)将
变量
Variant
转化为字符串类型 CDate(
Variant
)将
变量
Variant
转化为日期类型 CInt(
Variant
)将
变量
Variant
转化为整数类型 CLng(
Variant
)将
变量
Variant
转化为长整数类型 CSng(
Variant
)将
变量
Variant
转化为Single类型 CDbl(
Variant
)将
变量
Variant
转化为Double类型 CBool(
Variant
)将
变量
Variant
转化为布尔类型 2.字符串函数 常用字符串函数及功能如下表: 函数功能 取字符串长度Len(string) 大、小写字母转换Lcase(String), Ucase(String) 截取子字符串Mid(string,start[,length]) Left(string,length) Right(string,length) 删除空格Trim(string), Ltrim(string), Rtrim(string) 重复String(num1,str1) 空格Space(num1) 取代字符串Replace(str1,str2,str3) 字符串拆分为1维数组Split(str1,delimiter) 返回字符串位置InStr(str1,str2) 3.时间和日期函数 函数功能 Now()取得系统当前日期和时间 Date()取得系统当前日期 Time()取得系统当前时间 Month(Date)取得给定日期的月份 Day(Date)取得给定日期是几号 WeekDay(Date)取得给定日期是星期几 (星期天,1到6分别为1~7) Year(Date)取得给定日期的年份 DateDiff(“Var”,Var1,Var2)计算日期或时间Var1与Var2的间隔 “Var”:为时间间隔因子 DateAdd(“Var”,num,date) num:间隔倍数;date:原始日期或时间对时间/日期num作加法 FormatDateTime(Date,2)显示短日期格式 FormatDateTime(Date,1)显示长日期格式 FormatDateTime(Date,4)显示短时间格式 FormatDateTime(Date,3)显示长时间格式 4.数学函数 函数功能 Abs(number)返回一个数的绝对值 Sqr(number)返回一个数的平方根 Int(number)取number的最大整数部分 FormatNumber(num1,num2)将num1转化为指定小数位num2的数 Rnd()返回0到1的随机数 Ubound(数组名,维数)返回最大下标数 Lbound(数组名,维数)返回最小下标数 5.检验函数 函数功能 VarType(
Variant
)返回
变量
Variant
的数据子类型 IsEmpty(
Variant
)检查
变量
Variant
是否为Empty IsNull(
Variant
)检查
变量
Variant
是否为Null IsObject(
Variant
)检查
变量
Variant
是否为对象类型 IsNumeric(
Variant
)检查
变量
Variant
是否为数值类型 IsArray(
Variant
)检查
变量
Variant
是否为数组类型 IsDate(
Variant
)检查
变量
Variant
是否为日期类型 (二)VBScript脚本语言语句 1.条件语句 ⑴ If Then End If If 条件语句 Then 执行语句 End If ⑵ If Then Else End If(单条件) If 条件语句 Then 执行语句1 Else 执行语句2 End If ⑶ If Then Else End If(多条件) If 条件语句1 Then 执行语句1 ElseIf 条件语句2 Then 执行语句2 …….. Else 执行语句n+1 End If ⑷ Select Case 语句 Select Case
变量
或表达式 Case 结果1 执行语句1 Case 结果2 执行语句2 …… Case 结果 n 执行语句n Case Else 执行语句n+1 End Select 2.循环语句 ⑴ For …… Next循环 For counter=start To end [Step number] 执行语句 Next ⑵ Do …… Loop循环 Do While 条件1 执行语句 Loop 或 Do 执行语句 Loop While 条件1 ⑶ For Each…In循环 For Each <元素> In <集合> <语句> Next 说明:对<集合>中的每一个<元素> 依次执行<语句>一次。其集合元素为离散型的。 (三)VBScript过程 在VBScript中,过程有两种:Sub子程序和Function函数。 (1) Sub子程序 ● Sub子程序的语法: Sub 子程序名(参数1,参数2,…) 语句…… End Sub ● 调用子程序 1) Call 子程序名(参数1,参数2,…) 2) 子程序名 参数1,参数2,… (2) Function函数 ● Function函数的语法: Function 函数名(参数1,参数2,…) 语句…… End Function ● 调用函数
变量
= Function 函数名(参数1,参数2,…) 函数可以向
变量
一样引用和参与
运算
(四)“显示当月日历”实例分析 该程序的运行结果为显示当月的日历,其输出形式为: ......
ATL
3,248
社区成员
48,529
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章