电脑鼠标连点怎么操作

博客访问: 93689
博文数量: 24
博客积分: 2035
博客等级: 大尉
技术积分: 260
注册时间:
那啥,那谁,就这样吧
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
制作com组件和调用的相关步骤在前篇中已经说明了,基本步骤相同.不同的是前边例子是传递的参数,现在来传递数组.
1,制作com组件
2,添加类,初始化代码,GUID码
3,调用代码,这段代码可以和单参数传递的比较下.
void datazs::paint_time(double aa[], double bb[], double cc[], int n){/* &&&& 参数说明:&&&&&&&&&&&&& time_pRsp为接口调用参数,定义在前续文件中&&&&&&&&&&&&& s为返回值&&&&&&&&&&&&& x,y,z用来传递数组&&&&&&&&&&&&& N表示数组所含元素 &&&& */ &&& time_pRsp.CreateDispatch(CLSID_function_time,NULL); //创立接口&&& //定义数组 &VARIANT//返回值 &VARIANT//传递数组 &VARIANT&VARIANT&//初始化 &&& VariantInit(&s);&VariantInit(&x);&VariantInit(&y);&VariantInit(&z);&s.vt=VT_R8;//类型(双精度型)&&s.dblVal=0.0;&LONG para = 0;//返回参数个数 &&x.vt=VT_ARRAY|VT_R8; //类型(数组,双精度型)&y.vt=VT_ARRAY|VT_R8;&z.vt=VT_ARRAY|VT_R8;&SAFEARRAYBOUND rgsabound[1];
&rgsabound[0].cElements=n;&&& //数组所含元素数&rgsabound[0].lLbound=0;&& //数组上界&//创立数组&x.parray=SafeArrayCreate(VT_R8,1,rgsabound);& //创立一维数组&y.parray=SafeArrayCreate(VT_R8,1,rgsabound);&z.parray=SafeArrayCreate(VT_R8,1,rgsabound);&//锁定数组&SafeArrayLock(x.parray);&SafeArrayLock(y.parray);&SafeArrayLock(z.parray);&//数组传递数据&x.parray-&pvData=&y.parray-&pvData=&z.parray-&pvData=&//调用方法
&time_pRsp.myfunn(x,y,z);&//解锁&SafeArrayUnlock(x.parray);&SafeArrayUnlock(y.parray);&SafeArrayUnlock(z.parray);&time_pRsp.DetachDispatch();&time_pRsp.ReleaseDispatch();}
这里把com调用写成了函数的形式,传递三个数组和大小给该函数就可以了
阅读(2209) | 评论(0) | 转发(1) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。请完成以下验证码
查看: 77431|回复: 7
错误信息:数组成员引用下标超出定义范围
本帖最后由 Hoori 于
21:27 编辑
从网上下了个软件,一运行就提示出错!错误代码:1
错误信息:数组成员引用下标超出定义范围
不知道是什么原因,我已经第二次遇到这样的情况了,之前下了个互联搜索宝v1.14也是这样
1.jpg (36.05 KB, 下载次数: 116)
21:08 上传
这个软件的下载地址是:
/soft/download.asp?softid=51640&downid=45&id=51975
本帖最后由 Hoori 于
21:19 编辑
是不是这个出错的软件用的数据库啊,还是少了VC 2008++的驱动
应该是编程时数组越界了
lonelyarrow
你使用这个数组的时候 使用循环或者是其他的东西 跟他制定的元素下标 超出了它的数组最大长度
不知道你用的那个编程语言 所以只能这样说了
估计是程序的问题
抱歉由于VIRScan测试效果不佳没亲测
华为网盘地址提取工具_se.exe MD5-e1f97be93ef61d0736091 - VirSCAN.org 2.png (115.27 KB, 下载次数: 86)
21:27 上传
感谢解答: )
本帖最后由 Hoori 于
21:48 编辑
这个程序是用Safengine Shielden v2.1.6.0加的壳,所以杀软会误报,对于全保护带VM我无能为力脱不掉,所以也不知道此程序是用什么语言编译的,这个软件的作者也太缺德了,为了防止被XX,区段里还骂人,这又不是什么共享软件
1.jpg (27.54 KB, 下载次数: 55)
21:43 上传
一楼的下载地址可能有些问题,如无法下载,到这里下吧
/soft/51640.html
搜索了一下,应该是易语言的错误提示。
软件自身问题,联系作者
感谢解答: )
本帖最后由 tuw 于
22:52 编辑
下标出界&&典型的易语言提示。。
se已经有通用的破解工具,网上有的
LZ的问题目测是少了个key?
kmgril 该用户已被删除
本帖最后由 kmgril 于
23:05 编辑
se通用的破解工具只针对带key的程序,并不是脱壳机,所以这个用不上,楼上说的下标出界易语言正解,但PEID误报,应该是Safengine Shielden v2.1.7.0加的壳
1111.jpg (49.13 KB, 下载次数: 126)
22:56 上传
感谢解答: )
Copyright & KaFan & All Rights Reserved.
Powered by Discuz! X3.3( 苏ICP备号 ) GMT+8,C++字符数组和字符串不是一样么,为什么函数调用会出错?该如何解决 - C++当前位置:& &&&C++字符数组和字符串不是一样么,为什么函数调用会出C++字符数组和字符串不是一样么,为什么函数调用会出错?该如何解决&&网友分享于:&&浏览:9次C++字符数组和字符串不是一样么,为什么函数调用会出错?// task7.11_8.cpp : 定义控制台应用程序的入口点。//#include &stdafx.h&#include &iostream&int replace(char* str,char c1,char c2);int _tmain(int argc, _TCHAR* argv[]){ char str[] = &windowssystem&;// char* str = &windowssystem&;
task7.11_8.exe 中的 0x 处未处理的异常: 0xC0000005: 写入位置 0x 时发生访问冲突
这是为什么??? char c1 = 's' ,c2 = '$'; int times = replace(str,c1,c2); cout&&&返回替换次数:&&&times&& getchar(); return 0;}int replace(char* str,char c1,char c2){ int times = 0; while (*str) {
if (c1 == *str)
(*str) = c2;
str++; } &}------解决方案--------------------
char* str = &windowssystem&;
是字符串常量,不能修改其中的内容。懂了的话记得结业给分哦
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有C语言,引用结构体数组出错
问题大体描述:
&&& 我在一个函数newRecord()中创建了一个结构体数组records[1000],返回records作为函数addRecordsToFile的参数。在addRecordsToFile函数里面引用结构体数组records的值是出现错误,只能引用records[0]的值,后面就报错了。& 下面是两个函数的代码。
newRecord()函数,目的是返回records结构体数组的地址。
void* newRecord(struct FileState* file)
// 创建存储记录结构体的指针数组
struct Record records[1000];
int recordSum=0;
FILE * outputS
printf(&文件名: %s\n&,file-&fileName) ;
printf(&科目总数: %d\n&,file-&subjectNum);
printf(&科目名称及对应的学分:&);
for (i=0;i&file-&subjectNi++)
// 输出科目信息及其学分
printf(& %s(%2.1f)&,*(file-&suject+i),*(file-&weight+i));
printf(&\n&);
printf(&“姓名 性别 学号 科目成绩”格式输入记录,每条记录以回车结束\n&);
scanf(&%s%s%s&,records[recordSum].name,records[recordSum].sex,records[recordSum].stuNum);
records[recordSum].score=(float *)malloc(file-&subjectNum*sizeof(float));
for (i=0;i&file-&subjectNi++)
scanf(&%f&,records[recordSum].score+i);
printf(&score....%d==%2.1f\n&,i,*(records[recordSum].score+i));
printf(&是否继续添加记录 Y/N&);
getchar();
cmd=getchar();
if (cmd=='Y'||cmd=='y')
isFinish=0;
else if (cmd=='N'||cmd=='n')
isFinish=1;
recordSum++;
if (recordSum&50)
// 越界处理
} while (isFinish==0);
// 在此处更新记录文件FileState结构体里面的recordSum
if ((outputStream=fopen(file-&fileName,&r+&))==NULL)
de_catcheErro(&newRecord:...打开文件出错啦&);
file-&recordSum=file-&recordSum+recordS
printf(&recordSum.....%d&,file-&recordSum);
fwrite(file-&fileName,sizeof(file-&fileName),1,outputStream);
fwrite(&(file-&subjectNum),sizeof(file-&subjectNum),1,outputStream);
fwrite(&(file-&recordSum),sizeof(file-&recordSum),1,outputStream);
fclose(outputStream);
free(file);
// 现在得到一个结构体的数组
addRecordsToFile()& 以上面函数返回的records作为参数,在函数中引用该数组的值。
void addRecordsToFile(const struct Record (*records)[1000],int resordSum,struct FileState * file)
FILE * outputS
if ((outputStream=fopen(file-&fileName,&a+&))==NULL)
de_catcheErro(&addRecordsToFile:...打开记录文件出错啦&);
for (i=0;i&resordSi++)
printf(&add start...\n&);
fwrite(records[i]-&name,10*sizeof(char),1,outputStream);
printf(&1.....%s\n&,records[i]-&name);
fwrite(records[i]-&sex,sizeof(records[i]-&sex),1,outputStream);
printf(&2.....%s\n&,records[i]-&sex);
fwrite(records[i]-&stuNum,sizeof(records[i]-&stuNum),1,outputStream);
printf(&3.....%s\n&,records[i]-&stuNum);
fwrite(&(records[i]-&raking),sizeof(records[i]-&raking),1,outputStream);
printf(&4.....%d\n&,records[i]-&raking);
fwrite(&(records[i]-&weightScore),sizeof(records[i]-&weightScore),1,outputStream);
printf(&5.....%f\n&,records[i]-&weightScore);
for(j=0;j&file-&subjectNj++)
printf(&i=========%d,j========%d&,i,j);
printf(&......%2.1f..\n&,*(records[i]-&score+j));
fclose(outputStream);
} 控制代码:
records=(struct Record (*)[])newRecord(file);
//得到一个包含记录数组的指针
file=loadFile(*(fileList+fileNum-1));
//每次调用newRecord()后,file都会被释放,所以需要重新loadFile()
addRecordsToFile(records,file-&recordSum,file);
控制台的结果:
文件名: 成绩记录 科目总数: 2 科目名称及对应的学分: (1.0) 化学(1.0) “姓名 性别 学号 科目成绩”格式输入记录,每条记录以回车结束 小李 男 01 99 88 score....0==99.0 score....1==88.0 是否继续添加记录 Y/Ny 小红 女 02 88 99 score....0==88.0 score....1==99.0 是否继续添加记录 Y/Ny 小明 男 03 89 78 score....0==89.0 score....1==78.0 是否继续添加记录 Y/Nn recordSum.....43add start... 1.....小李 2.....男 3.....01 4.....- 5.....-0000 i=========0,j========0......99.0.. i=========0,j========1......88.0.. add start... 1.....4? 2.....3 3..... 4.....- 5.....-0000 i=========1,j========0请按任意键继续. . .
补充说明:
我现在在完成老师布置的学生管理系统,碰上了这个问题,想了好久还没解决。
struct&Record records[1000]; 是个临时变量,生命周期只在newRecords函数里。
--- 共有 4 条评论 ---
为什么这样不行
struct Record *
record=(struct Record*)malloc(1000*sizeof(struct Record));
然后将值写入
addRecordToFile(struct Record *records);
addRecordToFile(records);
: 我在程序的目的就是想创建1000个Record结构体,将控制台输入的值写入内存,并且将数组的地址返回给addRecorsToFile函数,将数据写入文件
: 可以看看堆栈的概念,你的数组其实是分配到栈空间上的。你要想有一个由你控制释放的内存空间要使用malloc/free分配到堆上去。
可是我很奇怪为什么records[0]有值。
现在C还有点不太熟,如果可以可以讲详细点。
楼上正解,简单作法,把它定义为全局变量,就ok了
做好动态申请 malloc
你分配的是临时变量,返回来也没用的,所以下个函数一旦引用就报错了
--- 共有 1 条评论 ---
嗯,的确是定义成局部变量不妥。可是我还是很好奇为什么返回的指针能够引用数组的第一组数据呢?
定义为全局变量小木虫 --- 600万学术达人喜爱的学术科研平台
&&查看话题
matlab函数调用与数组的问题
& & for j=1:J
& && &&&for n=0:N-1
& && && && &f(i,j,n)=feq(u,n,rho);
& && &&&end
function result=feq(u,n,rho)& &
& &%u(i,j,1)是坐标位置为(i,j)处的水平速度,u(i,j,2)是竖直方向的速度
for i=1:I-1
& & for j=1:J-1
& && &&&for n=1:N
& && && & eu=e(n,1).*u(:,:,1)+e(n,2).*u(:,:,2);
& && && & uv=u(:,:,1).*u(:,:,1)+u(:,:,2).*u(:,:,2);
& &%uv是水平方向与竖直方向速度的平方和
& && && & result=w(n)*rho*(1+3*eu+4.5*eu.*eu-1.5*uv);
& && &&&end
feq这么调用对不?eu和uv的写法对不?
本人初学,函数调用数组这方面不明白,请指点
程序比较长,所以没贴出来,程序运行一直是busy状态,不知道循环哪里出了问题。
可以考虑把源程序分步运行,看看问题出在哪个点上
已知是点(i,j)处的水平速度u1和竖直速度u2、该点的密度rho(速度和密度都与位置有关),求该点在n方向的feq函数
比如,在i=1,j=1处,n=2时
eu=1*u1+0*u2;uv=u1^2+u2^2;feq=1/9*rho*(1+3*eu+4.5*eu.*eu-1.5*uv);
不知道我说清楚了没,十分感谢指正!
计算出各个点的feq,程序的其他地方还要用到feq,所以觉得使用函数调用比较好
这是改过后的子函数
function result=feq(u,rho)
% double eu,uv,
I=256;J=256;
for i=1:I+1
& & for j=1:J+1
& && &&&for n=1:N
& &eu=e(n,1).*u(i,j,1)+e(n,2).*u(i,j,2);
& &uv=u(i,j,1).*u(i,j,1)+u(i,j,2).*u(i,j,2);
&&result=w(n)*rho*(1+3*eu+4.5*eu.*eu-1.5*uv);
& && &&&end
现在我在主函数用 f(i,j,:)=feq(u,rho);调用,出现结果
??? Subscripted assignment dimension mismatch.
Error in ==> LBGK_D2Q9_liddrivenflow at 26
& && && &&&f(i,j,:)=feq(u,rho);
怎么才能解决这个问题?十分感谢帮我看这个问题
将原程序改为
for i=1:I+1
& & for j=1:J+1
& && &&&u(i,j,1)=0;u(i,j,2)=0;
& && &&&rho(i,j)=rho0;
& && &&&u(i,J+1)=U;
& & f(:,:,n)=result(u,rho);
function feq=result(u,rho)
& &eu=e(n,1).*u(:,:,1)+e(n,2).*u(:,:,2);
& &uv=u(:,:,1).*u(:,:,1)+u(:,:,2).*u(:,:,2);
& &feq=w(n)*rho*(1+3*eu+4.5*eu.*eu-1.5*uv);
将不会出现原来的错误提示,但是主程序部分出现新的问题:
& & for j=2:J
& && &&&for n=1:N
& && && & ip=i-e(n,1);
& && && & jp=j-e(n,2);
& && && & F(i,j,n)=f(ip,jp,n)+(result(u(ip,jp),rho(ip,jp))-f(ip,jp,n))/
& && &&&end
因为我要算出(ip,jp)处的feq,按上面的写会提示出现错误如下:
??? Index exceeds matrix dimensions.
Error in ==> LBGK_D2Q9_liddrivenflow>result at 88
& &eu=e(n,1).*u(:,:,1)+e(n,2).*u(:,:,2);
Error in ==> LBGK_D2Q9_liddrivenflow at 37
& && && & F(i,j,n)=f(ip,jp,n)+(result(u(ip,jp),rho(ip,jp))-f(ip,jp,n))/
不知道该怎么改了,请看一下怎么改
按上面你说的可不可以认为feq在子程序只与n有关,所以在主程序调用的时候都要写成feq(i,j,:),而不是feq(i,j,n)?
可是这样的胡,后面的程序
& & for j=2:J
& && &&&for n=1:N
& && && & ip=i-e(n,1);
& && && & jp=j-e(n,2);
& && && & p=;
& && && & rho1=rho(ip,jp);
& && && & F(i,j,:)=f(ip,jp,:)+(result(p,rho1)-f(ip,jp,:))/
& && &&&end
运行后会出现
??? Error using ==> minus
Matrix dimensions must agree.
Error in ==> LBGK_D2Q9_liddrivenflow at 44
& && && & F(i,j,:)=f(ip,jp,:)+(result(p,rho1)-f(ip,jp,:))/
提示矩阵维数不一致,是不是说f(i,j,n)是三维的,而调用的feq(n)是一维的,这样的话怎么把feq变为三维数组?
不知道我的理解对不对?怎么样才能把feq变成三维数组?
还有一个问题,如果把主程序的这部分改为
& & for j=2:J
& && &&&for n=1:N
& && && & ip=i-e(n,1);
& && && & jp=j-e(n,2);
& && && & p=;
& && && & rho1=rho(ip,jp);
& && && & F(i,j,n)=f(ip,jp,n)+(result(p,rho1)-f(ip,jp,n))/
& && &&&end
提示出现错误
??? Assignment has more non-singleton rhs dimensions than non-singleton
subscripts
Error in ==> LBGK_D2Q9_liddrivenflow at 44
& && && & F(i,j,n)=f(ip,jp,n)+(result(p,rho1)-f(ip,jp,n))/
这句是什么意思?
非常感谢,不知道怎么才是按列排放,我只好定义了f=zeros(N,I+1,J+1),再没有出现问题
另外,我想请教函数调用的问题
f(I+1,j,n)=feq(I+1,j,n)+f(I,j,n)-feq(I,j,n)
(feq只是说明坐标)一个式子里出现两次要调用的函数result,按照你前面所说的
主程序里面对于第(i,j)点就用
rho1=rho(i,j);
feq(i,j,:)=result(p,rho1);
所以我写成
& &&&rho2=rho(I+1,j);
& &&&r2=result(p2,rho2);
& &&&rho3=rho(I,j);
& &&&r3=result(p3,rho3);
& &&&f(n,I+1,j)=r2(n)+f(n,I,j)-r3(n);
可以运行程序,不过要求的feq的点比较多,所以这个过程很长,有没有简单的办法调用?
北京学而思教育科技有限公司 地址:北京市海淀区北三环甲18号中鼎大厦A座1层102室 电话:010-

我要回帖

更多关于 求购电脑鼠标 的文章

 

随机推荐