阅读:2056回复:15
谁能帮我解决这个问题300元送上(关于twain工具的) |
|
|
沙发#
发布于:2003-07-08 15:38
一个字,顶 :D
|
|
|
板凳#
发布于:2003-07-08 17:57
tw_src32 这是不是一个DS(data source)
好像直接用VC 就可以调试的,与调试普通的 Dll一样。 好久没倒腾这个了,不知道对不对。 实在不行你用SoftIce调试。 |
|
|
地板#
发布于:2003-07-09 10:10
楼上的不妨讲讲你是怎样实现跟踪DS的? :D
|
|
|
地下室#
发布于:2003-07-14 10:10
这个贴子要顶 :D
|
|
|
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都输出到同一文件。这样,会话过程一目了然 :) |
|
|
6楼#
发布于:2003-07-17 13:43
swf2003 说得对的,和DLL调试无异。 恕我愚笨,本人调试动态连接库也有n个了,相信调试方法是对的,按你的方法(同我的方法),我的情况依旧 :D [编辑 - 7/17/03 by shengws] |
|
|
7楼#
发布于:2003-07-18 10:09
jason.gao & swf2003:
还有一个问题,就是是将调用驱动程序的代码做成动态连接库,ds去调用动态连接库,还是把调用驱动程序的代码嵌入到ds中? :D |
|
|
8楼#
发布于:2003-07-20 23:29
哈哈,分真多。明天我再看看,今天太晚了
|
|
|
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] |
|
|
10楼#
发布于:2003-07-21 09:35
老兄,如果你还不行,希望你也能详细写下你的操作步骤。否则我只能说:这是绝对可以行的。 :D :D
|
|
|
11楼#
发布于:2003-07-21 09:42
jason.gao & swf2003: 觉得这个问题有点没头没脑的。我也只能说点也许是不着边际的话: DS本身就是一个DLL,它调用另一个DLL当然没问题。在它里面加代码也是可行的。 |
|
|
12楼#
发布于:2003-07-21 10:58
[quote]jason.gao & swf2003: 觉得这个问题有点没头没脑的。我也只能说点也许是不着边际的话: DS本身就是一个DLL,它调用另一个DLL当然没问题。在它里面加代码也是可行的。 [/quote] jason.gao: 我明白我为什么不能跟踪ds,原因是由于我把我的调用驱动程序的 代码嵌在了ds中。我现在的意思是为了调试方便,我将驱动程序的 调用代码写成动态连接库,在ds中调用或许能够进行调试。毕竟 调用驱动程序的代码嵌在ds中看着有点不爽的感觉,所以把它分离 出来,这种方法是不是现在的通用做法? :D |
|
|
13楼#
发布于:2003-07-21 16:58
>> 将驱动程序的调用代码写成动态连接库
没有什么“通用做法”,反正怎样做都可行。当然,你这样做应该是更好的做法,因为更模块化、也可能被重用。比如当你需要向客户提供一个更易用的API,而不是只有Driver和DeviceIoControl,这个DLL(如果它是被良好定义了的)也许也用得上。 至于调试,两种情况都可以调试任何一个DLL。至于你说你因为“把调用驱动程序的代码嵌在了ds中”而不能跟踪,我反而不明白了。反正,你明白了就好了 :( |
|
|
14楼#
发布于:2003-07-24 11:08
JASON.GAO
DS中控制纸张大小的那个标尺是怎样实现的? :D |
|
|
15楼#
发布于:2003-07-24 11:19
扫描仪吗?没做过,我做的是camera:(
|
|
|