标题:VFP封装结构类型示例
只看楼主
sych
Rank: 3Rank: 3
等 级:论坛游侠
威 望:6
帖 子:179
专家分:183
注 册:2019-10-11
得分:0 
取不了目录
2022-03-17 08:21
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用sych在2022-3-17 08:21:08的发言:

取不了目录

这个是取文件名对话框,取文件夹对话框是另一个API,有空可以写个示例。
2022-03-17 08:38
sych
Rank: 3Rank: 3
等 级:论坛游侠
威 望:6
帖 子:179
专家分:183
注 册:2019-10-11
得分:0 
为根目录的时候多一个“\”
2022-03-17 08:47
sych
Rank: 3Rank: 3
等 级:论坛游侠
威 望:6
帖 子:179
专家分:183
注 册:2019-10-11
得分:0 
    nBuffSize = 80 * MAX_PATH             && 要有足够空间存放多个文件名。
    pFile = apiMalloc(nBuffSize)
    SYS(2600, pFile, LEN(cDefFile)+1, cDefFile+0h00)
...............

    cFiles = ""
   
    IF ret > 0
        nLen   = apiStrlen(pFile)    && pFile 以0h00分隔,以0h0000结束
        cFiles = SYS(2600, pFile, nLen)
        pFile  = pFile + nLen + 1
        nLen   = apiStrlen(pFile)
        IF nDialogType==0 AND nLen > 0
            cPaht = addbs(cFiles)
            cFiles = ""
            DO WHILE nLen > 0        && 多选
                cFiles = cFiles  + cPaht +  SYS(2600, pFile, nLen) + 0h0D0A
                pFile  = pFile + nLen + 1
                nLen   = apiStrlen(pFile)
            ENDDO
            cFiles = RTRIM(cFiles,0h0D0A)
        ENDIF     
    ENDIF

    apiFree(pFile)

ENDFUNC
2022-03-17 08:56
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用cssnet在2022-3-16 10:53:44的发言:
其实当时我说的指针,指的是回调函数指针。
一般若遇太过复杂的Windows API调用,在VFP中我会选择直接放弃。
倘若有可能,则会在VC写的DLL中新增一个函数,用C处理好,然后返回结果让VFP程序直接使用。
如此一来,就不必非要勉强VFP去处理它本就不擅长的、或处理起来相当困难、相当笨拙的、涉及到Windows系统核心部分的API调用。
当然,这就要求VFPer应当具备最起码的VC编程基础。
不过,既然已经要用到比较复杂的Api了,那么掌握C应当也算是最起码的程序员基本功罢?

1、回调函数问题。是函数类型指针(函数指针)的问题,VFP是没有这概念,原因是解释语言,通常函数指针是静态编译的产物。
有兴趣可以试试用其他语言写个相对通用的接口来处理部分VFP需要的“回调函数”问题。

2、VFP调用API的必要性问题。试回想一下好多年前(或VFP的前身年代),VFP基本上都很少讨论API,因为那时VFP已经感觉到自己很强大。
随着时代的发展进步,VFP却遭遇不幸得不到相应的发展,在不少方面已经不适应时代要求,尤其是进入互联网时代,VFP自己也感觉有些力不从心了。这时候VFPer也很无奈。年轻有精力的可以另谋高就转行,但相信这时不少VFPer都奔5奔6,甚至有奔7,要这把年纪的去休掉VFP另娶谈何容易,也不现实。要吃饭,程序还是要做下去,只能深挖VFP的潜能,将《深入Windows核心编程》在VFP得到应用。


2022-03-17 09:35
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用sych在2022-3-17 08:47:23的发言:

为根目录的时候多一个“\”

你截图来看看
我这未见异常

2022-03-17 09:42
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
调用 WinApi 回避不了指针,有必要讨论一下指针的问题。

不少初接触指针的人,也感觉指针不好学、难把握好。可能是因为一开始接触的编程语言太高级,对指针感觉太抽象。想当年DOS时代也有用debug命令来写汇编生成com,没有什么变量名、数据类型等等高级货,全是与寄存器、地址打交道。建议学编程的一定要了解一下汇编,最起码能看得明白基本常用的代码。不论什么编程语言写出来的程序,机器码(汇编)是他的最终归宿。

指针,不管对新手还是老手来说,都有犯错的可能,这不奇怪,很正常的事。有个“C0000005”的异常代号应该不陌生,还有以前的Wndows蓝屏也是常事,这大都是指针的开放性不受约束带来的问题,编程的一不小心指针就会犯傻。所以,现在的高级编程语言也有不引入指针的概念,希望少犯傻。VFP也有涉及到指针的命令,如SYS(2600,,),这命令会有可能犯傻的,之前就有贴讨论过这问题。

凡事要一分为二看,不要因指针会犯傻就不用。指针是个好东东,有时没他整不出好东东来。之前不久有贴讨论过从网页获取量大的JSON数据问题,用VFP字符串命令解释出全部数据要80多秒,放入JS对象解释要几秒,调用API用指针解释不到1秒,就是传说中的“秒杀”。所以,必要时该出手就要出手。


2022-03-17 11:15
sych
Rank: 3Rank: 3
等 级:论坛游侠
威 望:6
帖 子:179
专家分:183
注 册:2019-10-11
得分:0 
回复 26楼 吹水佬
单独选择一个文件时,正常
一次选择多个文件时,且是根目录下的文件时,会多一个“\”
2022-03-17 11:17
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用sych在2022-3-17 11:17:53的发言:

单独选择一个文件时,正常
一次选择多个文件时,且是根目录下的文件时,会多一个“\”

确是,谢指正!
要改两句
程序代码:
        IF nDialogType==0 AND nLen > 0
            **cPaht = cFiles
            cPaht = ADDBS(cFiles)
            cFiles = ""
            DO WHILE nLen > 0        && 多选
                **cFiles = cFiles  + cPaht + "\" +  SYS(2600, pFile, nLen) + 0h0D0A
                cFiles = cFiles  + cPaht + SYS(2600, ptr, nLen) + 0h0D0A
                ptr = ptr + nLen + 1
                nLen   = apiStrlen(ptr)
            ENDDO
            cFiles = RTRIM(cFiles,0h0D0A)
        ENDIF   


[此贴子已经被作者于2022-3-18 04:36编辑过]

2022-03-17 11:34
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:0 
以下是引用吹水佬在2022-3-17 08:38:59的发言:
这个是取文件名对话框,取文件夹对话框是另一个API,有空可以写个示例。

期待早日看到同样风格的取文件夹功能,vfp的GetDir函数样式跟吹版的GetFile实在不协调
2022-03-17 14:58



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-508553-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.193873 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved