shengws
驱动大牛
驱动大牛
  • 注册日期2002-03-08
  • 最后登录2010-06-21
  • 粉丝0
  • 关注0
  • 积分384分
  • 威望102点
  • 贡献值0点
  • 好评度37点
  • 原创分0分
  • 专家分0分
阅读:1968回复:15

谁能帮我解决这个问题300元送上(关于twain工具的)

楼主#
更多 发布于:2003-07-07 17:32
http://www.twain.org/devfiles/twainkit.exe
问题:
怎样才能debug这个工程中的tw_src32? :D


[编辑 -  7/8/03 by  shengws]
喂,小孩,你的小JJ露出来了!
shengws
驱动大牛
驱动大牛
  • 注册日期2002-03-08
  • 最后登录2010-06-21
  • 粉丝0
  • 关注0
  • 积分384分
  • 威望102点
  • 贡献值0点
  • 好评度37点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-07-08 15:38
一个字,顶 :D
喂,小孩,你的小JJ露出来了!
swf2003
驱动中牛
驱动中牛
  • 注册日期2003-02-13
  • 最后登录2011-10-28
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望22点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-07-08 17:57
tw_src32 这是不是一个DS(data source)
好像直接用VC 就可以调试的,与调试普通的 Dll一样。
好久没倒腾这个了,不知道对不对。
实在不行你用SoftIce调试。
你的认可是对我最大的鼓励!
shengws
驱动大牛
驱动大牛
  • 注册日期2002-03-08
  • 最后登录2010-06-21
  • 粉丝0
  • 关注0
  • 积分384分
  • 威望102点
  • 贡献值0点
  • 好评度37点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-07-09 10:10
楼上的不妨讲讲你是怎样实现跟踪DS的? :D
喂,小孩,你的小JJ露出来了!
shengws
驱动大牛
驱动大牛
  • 注册日期2002-03-08
  • 最后登录2010-06-21
  • 粉丝0
  • 关注0
  • 积分384分
  • 威望102点
  • 贡献值0点
  • 好评度37点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-07-14 10:10
这个贴子要顶 :D
喂,小孩,你的小JJ露出来了!
jason.gao
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2003-11-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-07-14 17:03
swf2003 说得对的,和DLL调试无异。

如果你还不太熟悉的话,我可以说具体点,反正我打字快。:D

1。将可执行程序设置为一个TWAIN客户程序,如Imaging, Word, Photoshop都行
2。在你的DS代码中设置断点(用VC就可以了);
3。运行客户程序,打开相应的的DS,会话到了相应的地方,就会在断点处停下来的。
不过你要确保调用的是你那个debug版的DS,因为DS是放在windows目录中的,所以你最好直接编译输出到那里。

个人而言,很多时候我还是喜欢用log的方式。尤其是这种会话型的(对于TWAIN而言,一般主要关心的也是它的会话过程)。
我当初就是做了一个log文件(不过我的log文件做得很高级;)),DS和DSM的log都输出到同一文件。这样,会话过程一目了然 :)
我打字很快。
shengws
驱动大牛
驱动大牛
  • 注册日期2002-03-08
  • 最后登录2010-06-21
  • 粉丝0
  • 关注0
  • 积分384分
  • 威望102点
  • 贡献值0点
  • 好评度37点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-07-17 13:43
swf2003 说得对的,和DLL调试无异。

如果你还不太熟悉的话,我可以说具体点,反正我打字快。:D

1。将可执行程序设置为一个TWAIN客户程序,如Imaging, Word, Photoshop都行
2。在你的DS代码中设置断点(用VC就可以了);
3。运行客户程序,打开相应的的DS,会话到了相应的地方,就会在断点处停下来的。
不过你要确保调用的是你那个debug版的DS,因为DS是放在windows目录中的,所以你最好直接编译输出到那里。

个人而言,很多时候我还是喜欢用log的方式。尤其是这种会话型的(对于TWAIN而言,一般主要关心的也是它的会话过程)。
我当初就是做了一个log文件(不过我的log文件做得很高级;)),DS和DSM的log都输出到同一文件。这样,会话过程一目了然 :)
 


恕我愚笨,本人调试动态连接库也有n个了,相信调试方法是对的,按你的方法(同我的方法),我的情况依旧 :D

[编辑 -  7/17/03 by  shengws]
喂,小孩,你的小JJ露出来了!
shengws
驱动大牛
驱动大牛
  • 注册日期2002-03-08
  • 最后登录2010-06-21
  • 粉丝0
  • 关注0
  • 积分384分
  • 威望102点
  • 贡献值0点
  • 好评度37点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-07-18 10:09
jason.gao & swf2003:
还有一个问题,就是是将调用驱动程序的代码做成动态连接库,ds去调用动态连接库,还是把调用驱动程序的代码嵌入到ds中?
 :D
喂,小孩,你的小JJ露出来了!
jason.gao
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2003-11-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-07-20 23:29
哈哈,分真多。明天我再看看,今天太晚了
我打字很快。
jason.gao
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2003-11-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-07-21 09:30
呵呵,大家就都笨一次。step by step,我写下我做的所有操作,希望您耐心一点,我可真把您当笨人了。:D


1。安装twain toolkit,版本1.7左右,没细看,反正跟版本不会有太大关系。


2。打开DS的project(VC6+SP5,跟这个也不会有啥关系,写下来只是例行公事)。编译,报告comctl32.lib找不到。也没细查,在file 里直接删掉,用了系统的。即把它加到 Project Settings -> Link -> Input -> Object/library modules 里面。编译通过。


3。设置 Executable for debug session:
D:\\Program Files\\TWAIN Working Group\\TWAIN Toolkit\\Twack_32.exe
即它自带的测试程序。


4。断点设到dllmain第一行
if (!hModule)
{
return(0);
}


5。运行,报告twack_32不含debug info,忽略。


6。File -> Select Source... 在对话框弹出之前,就停在了断点上。按F5继续,又会停一次。然后才会出现对话框,其中含有一项:Twain_32 Sample Source,这是我们的DS。

其实到这里,我是有一点纳闷的,因为实际使用的DS和编译输出的DS不是一个文件。对我的机器,
前者是:
D:\\WINNT\\twain_32\\Sample\\twsrc_32.ds
后者是:
c:\\windows\\twain_32\\sample\\twsrc_32.ds


7。心里不踏实,再试试。我在你所指的地方也设了个断点。呵呵,我不知道你确切地设在哪里,根据你提供的图,反正我就设在了

Scanner.c -> StartScan()里
VERIFY(GetModuleFileName(hDSInst, szModulePath, _MAX_PATH));
_splitpath(szModulePath, szDriveName, szFileLocation, NULL, NULL);
wsprintf(szCompletePath, \"%s%s\", szDriveName, szFileLocation);


8。再运行,怪事发生了。虽然DllMain里的断点停住了,但继续后,对话框不出来了。把StartScan里的断点去掉后,又会正常。


9。还是老实点吧,将编译输出设为实际使用的文件,即
Project Settings -> Link -> General -> Output file name:
D:\\WINNT\\twain_32\\Sample\\twsrc_32.ds


10。rebuild all
运行;
select source;
acquire,对话框出现,点Scan,断点停在了StartScan里。





[编辑 -  7/21/03 by  jason.gao]
我打字很快。
jason.gao
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2003-11-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-07-21 09:35
老兄,如果你还不行,希望你也能详细写下你的操作步骤。否则我只能说:这是绝对可以行的。 :D :D

我打字很快。
jason.gao
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2003-11-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-07-21 09:42
jason.gao & swf2003:
还有一个问题,就是是将调用驱动程序的代码做成动态连接库,ds去调用动态连接库,还是把调用驱动程序的代码嵌入到ds中?
 :D


觉得这个问题有点没头没脑的。我也只能说点也许是不着边际的话:
DS本身就是一个DLL,它调用另一个DLL当然没问题。在它里面加代码也是可行的。

我打字很快。
shengws
驱动大牛
驱动大牛
  • 注册日期2002-03-08
  • 最后登录2010-06-21
  • 粉丝0
  • 关注0
  • 积分384分
  • 威望102点
  • 贡献值0点
  • 好评度37点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-07-21 10:58
[quote]jason.gao & swf2003:
还有一个问题,就是是将调用驱动程序的代码做成动态连接库,ds去调用动态连接库,还是把调用驱动程序的代码嵌入到ds中?
 :D


觉得这个问题有点没头没脑的。我也只能说点也许是不着边际的话:
DS本身就是一个DLL,它调用另一个DLL当然没问题。在它里面加代码也是可行的。

 [/quote]

jason.gao:
我明白我为什么不能跟踪ds,原因是由于我把我的调用驱动程序的
代码嵌在了ds中。我现在的意思是为了调试方便,我将驱动程序的
调用代码写成动态连接库,在ds中调用或许能够进行调试。毕竟
调用驱动程序的代码嵌在ds中看着有点不爽的感觉,所以把它分离
出来,这种方法是不是现在的通用做法? :D
喂,小孩,你的小JJ露出来了!
jason.gao
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2003-11-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-07-21 16:58
>> 将驱动程序的调用代码写成动态连接库

没有什么“通用做法”,反正怎样做都可行。当然,你这样做应该是更好的做法,因为更模块化、也可能被重用。比如当你需要向客户提供一个更易用的API,而不是只有Driver和DeviceIoControl,这个DLL(如果它是被良好定义了的)也许也用得上。

至于调试,两种情况都可以调试任何一个DLL。至于你说你因为“把调用驱动程序的代码嵌在了ds中”而不能跟踪,我反而不明白了。反正,你明白了就好了 :(
我打字很快。
shengws
驱动大牛
驱动大牛
  • 注册日期2002-03-08
  • 最后登录2010-06-21
  • 粉丝0
  • 关注0
  • 积分384分
  • 威望102点
  • 贡献值0点
  • 好评度37点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-07-24 11:08
JASON.GAO
DS中控制纸张大小的那个标尺是怎样实现的? :D
喂,小孩,你的小JJ露出来了!
jason.gao
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2003-11-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-07-24 11:19
扫描仪吗?没做过,我做的是camera:(
我打字很快。
游客

返回顶部