我有一个dll,我想调用里面的函数,希望大家帮我弄成delphi的格式。。(200)

  • 主题发起人 主题发起人 likingzhe
  • 开始时间 开始时间
szhcracker,老大。我把全部的东西都放好了。
 
.。。。。驱动3m比我的笔记容量大,发不了。您有邮箱或者qq嘛、、、
 
szhcracker@sohu.com
 
发过去了,szhcracker老大
 
你把 RegistCallBack 的名称改为 RegistCallback 再试试,这个函数区分大小写的。还有,这个东东要安装触摸屏到电脑的串口,因此无法调试,你先把那个函数的名称改好后再调试一下,应该可以的,至少这句 RegistCallback(@MultTouchCallBack); 是可以过去的,主要是 StartComDevice(0, True); 这句过不去,你那儿如果装了触摸屏的话就可以看看能否通过了。
 
。。。改过来了,可是这次编译,直接就是错误了。无法运行!ErrorRuntime error 216 at 004030DE
 
呵呵,现在是能编译了,可是过不去。报个内存之类的错误,我们离成功不远了,老大加油,我也加油
 
我把修改后的文件放到笔记中了,点击如下连接下载:http://www.delphibbs.com/keylife/iblog_show.asp?xid=34464我只是简单的翻译了一下它的.cpp源码中的一些,可能对你有个参考作用。你要检查一下设备的连接、串口等,还有就是调试一下,看看是哪句报错。还有,如果触摸屏供应商有开发人员或技术支持的话最好问他们直接要 Delphi版的Demo,这样最方便、可靠,好过自己摸索,祝你好运。
 
你可以把函数的定义部分改为:function StartComDevice(nport: Integer; bTransform: Boolean): Integer; cdecl; external 'MultiTouchSDK.dll'; function RegistCallback(hMultTouchCallBack: PChar): Integer; cdecl; external 'MultiTouchSDK.dll'; function StopComDevice(): Integer; cdecl; external 'MultiTouchSDK.dll';试试,有可能调用的方式不是 stdcall
 
szhcracker老大,您那个点击了btn也报错了。access violation at address 00000400. read of 00000400.
 
szhcracker老大,按照您最后那个修改函数定义,程序是不报错了。现在我也不知道程序对不对,您应该知道我想干什么了吧。我想取的是,点坐标。屏幕上有2个点(类似鼠标。。),我要通过dll,取得那2个点的位置。当我移动‘点’时,它的坐标也要相应变化。我们可以用label来显示它的位置。这个位置我该怎么写,写在那里?我在尝试写了下,就会报错。。。。呵呵,最后一道坎了
 
没有任何技术支持。。。。我也想要。。。要不我能郁闷到现在脸都紫了。。。
 
你可以放一个Timer,间隔时间设为500毫秒,然后在它的OnTimer事件里调用那个回调函数 RegistCallback;你要的位置就应该在那2个全局变量 gP1, gP2 里,或者你把代码改为// 注:每个点都有两对坐标,即左上角和右下角坐标 if Cnt = 1 then // Cnt表示触摸的点数,1表示单点点触摸 begin label1.Caption := IntToStr(pd.x1); // 单点触摸时该点的左上角x轴坐标 label2.Caption := IntToStr(pd.x2); // 单点触摸时该点的右下角x轴坐标 label3.Caption := IntToStr(pd.y1); // 单点触摸时该点的左上角y轴坐标 label4.Caption := IntToStr(pd.y2); // 单点触摸时该点的右下角y轴坐标 end; if Cnt = 2 then begin label1.Caption := IntToStr(pd.x1); // 两点触摸时第一点的左上角x轴坐标 label2.Caption := IntToStr(pd.x2); // 两点触摸时第一点的右下角x轴坐标 label3.Caption := IntToStr(pd.y1); // 两点触摸时第一点的左上角y轴坐标 label4.Caption := IntToStr(pd.y2); // 两点触摸时第一点的右下角y轴坐标 label5.Caption := IntToStr(pd.x1); // 两点触摸时第二点的左上角x轴坐标 label6.Caption := IntToStr(pd.x2); // 两点触摸时第二点的右下角x轴坐标 label7.Caption := IntToStr(pd.y1); // 两点触摸时第二点的左上角y轴坐标 label8.Caption := IntToStr(pd.y2); // 两点触摸时第二点的右下角y轴坐标 end;看看哪个是你需要的,单步跟踪调试一下看看,还有根据文档,得到的坐标要经过转换才是鼠标坐标,转换的代码我已经写出来了。你要特别注意下面的补充说明:获取到触摸屏的相应坐标后,要转换为相应的鼠标坐标。计算方式如下:通过下面的两句获取到显示器的分辨率的相应值,int scx = GetSystemMetrics(SM_CXSCREEN);//表示X方向int scy = GetSystemMetrics(SM_CYSCREEN);//表示Y方向假设相应的鼠标坐标X轴的值为x,Y轴的值为y,那么于是有:x= pd[0].x1 * scx / 4096y= pd[0].y1 * scy / 4096也就是说要乘以一个转换因子scx/4096,这样就能得到对应的鼠标坐标值。还有,如果对于一个触摸点,您不需要两对坐标值,只需要一对坐标值就能满足您的要求,请您取每个触摸点的左上角那对坐标值,如上面例子所示。相信你可以搞定了,[:)]
 
[?]怎么弄,还是搞不懂。都没看懂是为什么。。。触摸屏的位置,难道不是鼠标的实际位置嘛,触摸屏不是和显示器的位置是对应的嘛?老大,好人做到底吧。我也自己尝试弄下,一头浆水。
 
Timer放了,可是gp之类的,怎么取都不会。。poingdate是什么我都不知道。if Cnt = 1 then // Cnt表示触摸的点数,1表示单点点触摸 begin label1.Caption := IntToStr(pd.x1); // 单点触摸时该点的左上角x轴坐标 label2.Caption := IntToStr(pd.x2); // 单点触摸时该点的右下角x轴坐标 label3.Caption := IntToStr(pd.y1); // 单点触摸时该点的左上角y轴坐标 label4.Caption := IntToStr(pd.y2); // 单点触摸时该点的右下角y轴坐标 end;这个到是能看懂,可是,写在那里不清楚。就算写了,还不认cnt是什么。。。我是失败到家了。。。
 
我在试试。。。
 
发现LZ有不少未结贴呢?如下就有一个:http://www.delphibbs.com/delphibbs/dispq.asp?lid=3981980我还回了不少,唉,打字也很辛苦,我又打的慢,所以请你这贴先结了吧,再说都到这步了应该没有什么难度了,你要学会单步跟踪代码,看看pd.x1、pd.x2到底是什么,是不是你需要的?是否需要转换,总之要多试试了。另:老账未结之前,本人不再回答。
 
问题回答完了,或者回答对了,才会结贴。之前那些你都看了,有谁回答了。而且回答的都不对,我说把问题说得很清楚了。这些帖子并没有完成。就说memo那个,我要的是,段落开头和结尾要加内容的。这个不是用,缩进空格和判断回车符那么简单的。要是这样我自己就搞定了,不需要问人。因为我判断的段落里,有可能是没有回车符的。例如文章的最后一段,这样我就无法加入我想要的内容。 恩,这个帖子算是完成了。我开个新帖子,老帖子我会去看看,有没有价值结束。
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
496
import
I
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部