我有一个dll文件,在使用过程中,参数出问题了。

whitefang1978 2009-06-11 05:12:12
我做了一个登陆窗口的DLL,参数分别如下pass(app:THandle;strpass:string):boolean;stdcall;
我在使用时,第二个参数出问题了,我用普通的字符串常量,变量都没有问题。如下:
pass(application,'123456')或者

s:='123456';
pass(application,s);

但是,我从数据库中取出一个字符串时,出现错误,

s:=query.fieldbyname('datavalue').asstring;
pass(application,s);

出现严重错误。

请求帮助。
datavalue字段是一个200个字符长度的文本型数据。
...全文
77 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
soweb 2009-06-12
  • 打赏
  • 举报
回复
不要用STRING
whitefang1978 2009-06-12
  • 打赏
  • 举报
回复

我用delphi编的DLL
现在在DLL中,我将STRING类型的参数改成了PCHAR类型,问题结决。
谢谢楼上各位的热心相助。
结贴。

taxi 2009-06-11
  • 打赏
  • 举报
回复
或者将ShareMem做为工程文件的第一个uses单元,程序发布时必须带上borlndmm.dll
taxi 2009-06-11
  • 打赏
  • 举报
回复
在dll里传递字符串类的参数改用PChar类型。
linghive 2009-06-11
  • 打赏
  • 举报
回复
试试这样看看
s:=Trim(query.fieldbyname('datavalue').asstring);
pass(application,s);
genispan 2009-06-11
  • 打赏
  • 举报
回复
DLL是delphi写的么?
de410 2009-06-11
  • 打赏
  • 举报
回复
看看你的DLL文件里面的strpass参数是怎么定义的~~允许的最大长度是多少?
1 建bat文件自动执行复制,删除命令。 例1:以下是复制cd.dll文件至windows\system32的bat文件内容: copy cd.dll %windir%\system32 例2:下面一行是卸载windows\system32目录的cd.dll,即把上面复制的文件删除: del %windir%\system32\cd.dll 例3:删除download文件文件,例子如下: del C:\DOWNLOAD\*.* [注意]:这里的del命令只能删文件,不能删文件夹。要删除文件夹得用rd命令,如下: rd Filemon 这里filemon文件夹和该bat文件在同一目录下,就省去具体路径了。但rd只能删除空文件夹. 要删除文件夹及其里面的所有子目录和文件,用rd命令带/s /q参数, /s参数表示删除该文件夹及其下面的子目录和文件 /q参数表示,不需要确认 范例如下: rd 123 /s /q 2 创建文件夹 例:在E:\My documents下面一次创建3个新文件夹:Newfolder1,Newfolder2,Newfolder3 @echo off md "E:\My documents\Newfolder1" md "E:\My documents\Newfolder2" md "E:\My documents\Newfolder3" 3 执行程序,打开文件 例1:执行C盘下的WinWord.exe程序 start C:\WinWord.exe 例2:用某个程序打开某个文件,如用TheWorld.exe打开一个htm文件 start d:\TheWorld\TheWorld.EXE C:\我有一个恋爱.htm [注意]:不论是程序或文件路径含有空格,都必须用引号括起来: start d:\TheWorld\TheWorld.EXE "e:\My documents\我有一个恋爱.htm" 所有程序的引号不能是全角的,必须用半角的格式,所以输入引号前最好关闭汉字输入系统 XCOPY 还有众多的功能, 是加参数来完成的。上面的/s /e 参数的作用分别是把子目录和空目录都复制过去,一些使用举例和参数说明如下: 1、如只是单纯地复制 E:\ 盘上所有文件到 D:\ 盘上,就输入“ xcopy e:\*.* d: /s /h "就行啦!如果在复制过程,你不要他复制文件啦!那就按键盘热键“Ctrl " +"Pause /break" 二个热键 来断复制。 2、如果想把E:\ 盘上所有文件复制到D:\盘上,分为今天复制一点,明天再接着复制一些,后天再接着复制一些。或者是某种原因上次没有复制完成,今天想接着复制。(这种情况是经常在复制文件现的)那可怎么办才好呢? 那就输入“ xcopy e:\*.* d: /s /h /d /y ”就行啦。他能查那些文件是已经复制过去啦,那些文件还没有复制过去的。 3、当然我们也会碰到这种情况,一些文件我们已经修改过啦!网上面又有最新版本的啦。原来备份的那份文件我们要及时更新啦。那怎么才能同步更新呢?当然我们可以把最新的好份文件复制过去,这也是一种解决办法。 如果修改的文件有很多的,自己到时候也记不清楚那份文件是更新过的。这么多的原来备份的那份文件都要更新,都要复制过去,可不是件省力气的活,而且容易错和一些文件被忘记啦! 那和上面一样也同样输入" xcopy e:\*.* d: /s /h /d /y "就行啦! 4、还有一种情况我们经常也碰到的,因为复制某个文件错或者这个文件使用,而停止了复制工作,(比如,复制C 盘上的 windows xp )我们这时候想跳过某个错的文件和某个正在使用文件而继续复制其他文件。 在多加入一个参数" /c "就是 " xcopy e:\*.* d: /s /h /d /c /y "就行啦! 5、有时候我们想XCOPY 变为自动复制,并且复制完成后关闭电脑,可以建立一个批处理文件,新建文本文档,更名为XCOPY.BAT 当然扩展名原来是TXT 格式的要更名为BAT 在这个 XCOPY.BAT 输入 xcopy e:\*.* d: /s /h /c /y shutdown -s 然后双击xcopy.bat 运行它,你这时候可以去玩啦。电脑会自己复制备份完成文件然后自动关闭电脑。 XCOPY source [destination] 参数(如 /s /e) source 指定要复制的文件。 destination 指定新文件的位置和/或名称。 /A 只复制有存档属姓集的文件, 但不改变属姓。 /M 只复制有存档属姓集的文件, 并关闭存档属姓。 /D:m-d-y 复制在指定日期或指定日期以后改变的文件。 如果没有提供日期,只复制那些源时间 比目标时间新的文件。 /EXCLUDE:file1[+file2][+file3]... 指定含有字符串的文件列表。如果有任何 字符串与要被复制的文件的绝对路径 相符,那个文件将不会得到复制。 例如,指定如 \obj\ 或 .obj 的字符串会排除 目录 obj 下面的所有文件或带有 .obj 扩展名的文件。 /P 创建每个目标文件前提示。 /S 复制目录和子目录,除了空的。 /E 复制目录和子目录,包括空的。 与 /S /E 相同。可以用来修改 /T。 /V 验证每个新文件。 /W 提示您在复制前按键。 /C 即使有错误,也继续复制。 /I 如果目标不存在,又在复制一个以上的文件, 则假定目标一定是一个目录。 /Q 复制时不显示文件名。 /F 复制时显示完整的源和目标文件名。 /L 显示要复制的文件。 /G 允许将没有经过加密的文件复制到 不支持加密的目标。 /H 也复制隐藏和系统文件。 /R 改写只读文件。 /T 创建目录结构,但不复制文件。不 包括空目录或子目录。/T /E 包括 空目录和子目录。 /U 只复制已经存在于目标文件。 /K 复制属姓。一般的 Xcopy 会重设只读属姓。 /N 用生成的短名复制。 /O 复制文件所有权和 ACL 信息。 /X 复制文件审核设置(隐含 /O)。 /Y 禁止提示以确认改写一个 现存目标文件。 /-Y 导致提示以确认改写一个 现存目标文件。 /Z 用重新启动模式复制网络文件。 Xcopy 复制文件和目录,包括子目录。 语法 xcopy Source [Destination] [/w] [/p] [/c] [/v] [/q] [/f] [/l] [/g] [/d[:mm-dd-yyyy]] [/s [/e]] [/t] [/k] [/r] [/h] [{/a|/m}] [/n] [/o] [/x] [/exclude:file1[+[file2]][+[file3]] [{/y|/-y}] [/z] 参数 Source 必需的。指定要复制的文件的位置和名称。该参数必须包含驱动器或路径。 Destination 指定要复制的文件的目标。该参数可以包含驱动器盘符和冒号、目录名、文件名或者它们的组合。 /w 在开始复制文件之前将显示以下消息并等待您的响应: Press any key to begin copying file(s) /p 提示您确认是否要创建每个目标文件。 /c 忽略错误。 /v 在写入目标文件时验证每个文件,以确保目标文件与源文件完全相同。 /q 禁止显示 xcopy 消息。 /f 复制时显示源文件名和目标文件名。 /l 显示要复制的文件列表。 /g 创建解密的目标文件。 /d[:mm-dd-yyyy] 只复制那些在指定日期或指定日期之后更改过的源文件。如果不包括 mm-dd-yyyy 值,xcopy 会复制比现有 Destination 文件新的所有 Source 文件。该命令行选项使您可以更新更改过的文件。 /u 只从 source 复制 destination 已有的文件。 /i 如果 Source 是一个目录或包含通配符,而 Destination 不存在,xcopy 会假定 destination 指定目录名并创建一个新目录。然后,xcopy 会将所有指定文件复制到新目录。默认情况下,xcopy 将提示您指定 destination 是文件还是目录。 /s 复制非空的目录和子目录。如果省略 /s,xcopy 将在一个目录工作。 /e 复制所有子目录,包括空目录。同时使用 /e、/s 和 /t 命令行选项。 /t 只复制子目录结构(即目录树),不复制文件。要复制空目录,必须包含 /e 命令行选项。 /k 复制文件,如果源文件具有只读属姓,则在目标文件保留该属姓。默认情况下,xcopy 会删除只读属姓。 /r 复制只读文件。 /h 复制具有隐藏和系统文件属姓的文件。默认情况下,xcopy 不复制隐藏或系统文件。 /a 只复制那些具有存档文件属姓设置的源文件。/a 不修改源文件的存档文件属姓。有关如何通过使用 attrib 来设置存档文件属姓的信息,请参阅“”。 /m 复制具有存档文件属姓设置的源文件。与 /a 不同,/m 关闭在源指定的文件的存档文件属姓。有关如何通过使用 attrib 来设置存档文件属姓的信息,请参阅“”。 /n 使用 NTFS 短文件或目录名创建副本。将文件或目录从 NTFS 卷复制到 FAT 卷或者当目标文件系统需要 FAT 文件系统命名约定(即 8.3 个字符)时,需要 /n。目标文件系统可以是 FAT 或 NTFS。 /o 复制文件所有权与自由选择的访问控制列表 (DACL) 信息。 /x 复制文件审核设置和系统访问控制列表 (SACL) 信息(包含 /o)。 /exclude:filename1[+[filename2]][+[filename3]] 指定包含字符串的文件列表。 /y 禁止提示您确认要覆盖现存的目标文件。 /-y 提示您确认要覆盖现有目标文件。 /z 在可重启模式通过网络复制。 /? 在命令提示符显示帮助。 注释 使用 /v XOX 使用 /exclude 列每个文件的单独行的每个字符串。如果列的任何字符串与要复制的文件的绝对路径的任何部分匹配,就从复制进程排除该文件。例如,如果指定字符串 "\Obj\",则会排除 Obj 目录下的所有文件。如果指定字符串 ".obj",则排除具有 .obj 扩展名的所有文件使用 /z 如果在复制过程丢失连接(例如,如果用于连接的服务器脱机),复制过程将在重新建立连接后恢复。/z 也显示每个文件完成的复制操作的百分比。 在 COPYCMD 环境变量使用 /y 可在 COPYCMD 环境变量使用 /y。在命令行上使用 /-y 可以覆盖该命令。默认情况下,会提示您覆盖,除非您从批处理脚本内运行 copy。 复制加密的文件 将加密文件复制到不支持 EFS 的卷会导致错误。应首先解密文件或将文件复制到支持 EFS 的卷。 附属文件 要附加文件,请指定单个目标文件,多个源文件使用通配符或文件 1 + 文件 2 + 文件 3 格式)。 Destination 的默认值 如果省略 Destination,xcopy 命令将文件复制到当前目录。 指定 Destination 是文件还是目录 如果 Destination 不包含现有目录且不以反斜杠 (\) 结尾,会现下列消息: Does destination specify a file name or directory name on the target (F = file, D = directory)? 如果要将一个或多个文件复制到一个文件,请按 F。如果要将一个或多个文件复制到一个目录,请按 D。 使用 /i 命令行选项可抑制显示该消息,从而导致 xcopy 认定在源是多个文件一个目录的情况下,目标是一个目录。 使用 xcopy 命令设置 Destination 文件的存档属姓 xcopy 命令创建具有存档属姓设置的文件,无论源文件是否设定了此属姓。有关文件属姓和 attrib 的详细信息,请参阅“”。 比较 xcopy 和 diskcopy 如果磁盘的子目录包含文件,要将其复制到具有不同格式的磁盘,请使用 xcopy 命令,而不要使用 diskcopy。因为 diskcopy 命令是一个磁道接一个磁道地复制磁盘,所以需要源磁盘和目标磁盘的格式必须相同。xcopy 命令没有该要求。通常情况下请使用 xcopy,除非您需要完整的磁盘图像副本。 xcopy 的退码 要处理 xcopy 返回的退码,请在批处理程序的 if 命令行上使用 errorlevel 参数。有关使用“if”处理退码的批处理程序的范例,请参阅“”。下表列一个退码和说明。 退码 说明 0 文件复制没有错误。 1 没有找到要复制的文件。 2 用户按 CTRL+C 终止了 xcopy。 4 现了初始化错误。没有足够的内存或磁盘空间,或命令行上输入了无效的驱动器名称或语法。 5 现了磁盘写入错误。 范例 要从驱动器 A 将所有文件和子目录(包括所有空的子目录)复制到驱动器 B,请键入: xcopy a:b:/s /e 要包含上一示例的任何系统或隐藏文件,请按如下所示添加 /h 命令行选项: xcopy a:b:/s /e /h 要使用 \Rawdata 目录 1993 年 12 月 29 日后更改的文件更新 \Reports 目录文件,请键入: xcopy \rawdata \reports /d:12-29-1993 要更新上例 \Reports 存在的所有文件,而不考虑日期,请键入: xcopy \rawdata \reports /u 如果只想获得前一个命令要复制的文件列表,而不复制文件,请键入: xcopy \rawdata \reports /d:12-29-1993 /l > xcopy.out 文件 Xcopy.out 列了要复制的所有文件。 要将 \Customer 目录和所有子目录复制到网络驱动器 H: 上的目录 \\Public\Address,保留只读属姓,并在 H: 上创建新文件时对您做提示,请键入: xcopy \customer h:\public\address /s /e /k /p 要发一个命令,确保在 \Address 目录不存在时 xcopy 会创建该目录,同时应抑制显示创建新目录时要显示的消息,请按如下所示添加 /i 命令行选项: xcopy \customer h:\public\address /s /e /k /p /i 可以创建批处理程序执行 xcopy 操作,并且使用 if 批处理命令在发生错误时处理退码。例如,以下的批处理程序使用可替换的 xcopy 源和目标参数: @echo off rem COPYIT.BAT transfers all files in all subdirectories of rem the source drive or directory (%1) to the destination rem drive or directory (%2) xcopy %1 %2 /s /e if errorlevel 4 goto lowmemory if errorlevel 2 goto abort if errorlevel 0 goto exit :lowmemory echo Insufficient memory to copy files or echo invalid drive or command-line syntax. goto exit :abort echo You pressed CTRL+C to end the copy operation. goto exit :exit 要使用该批处理程序将 C:\Prgmcode 目录和其子目录的所有文件复制到驱动器 B ,请键入: copyit c:\prgmcode b: 该命令解释程序将用 C:\Prgmcode 替换 %1 与 B:。对于 %2,然后使用 xcopy 与 /e 和 /s 命令行选项。如果 xcopy 遇到错误,批处理程序将读取退码并转到相应 IF ERRORLEVEL 语句指示的标签,然后显示相应的消息并退批处理程序。
第三卷************** 不错的PDF电子书,共3个分卷,点我名字可以找全 第1部分 逆向101 第1章 基础 3 1.1 什么是逆向工程 3 1.2 软件逆向工程:逆向 4 1.3 逆向应用 4 1.3.1 与安全相关的逆向 5 1.3.2 软件开发的逆向 8 1.4 底层软件 9 1.4.1 汇编语言 10 1.4.2 编译器 11 1.4.3 虚拟机和字节码 12 1.4.4 操作系统 13 1.5 逆向过程 13 1.5.1 系统级逆向 14 1.5.2 代码级逆向 14 1.6 工具 14 1.6.1 系统监控工具 15 1.6.2 反汇编器 15 1.6.3 调试器 15 1.6.4 反编译器 16 1.7 逆向合法吗? 17 1.7.1 互操作性 17 1.7.2 竞争 18 1.7.3 版权法 19 1.7.4 商业机密和专利权 20 1.7.5 美国数字千禧版权法 20 1.7.6 DMCA案例 22 1.7.7 许可证协议 23 1.8 代码范例与工具 23 1.9 结论 23 第2章 底层软件 25 2.1 高阶视角 26 2.1.1 程序结构 26 2.1.2 数据管理 29 2.1.3 控制流 32 2.1.4 高级语言 33 2.2 低阶视角 37 2.2.1 底层数据管理 37 2.2.2 控制流 43 2.3 汇编语言101 44 2.3.1 寄存器 44 2.3.2 标志位 46 2.3.3 指令格式 47 2.3.4 基本指令 48 2.3.5 范例 52 2.4 编译器和编译入门 53 2.4.1 定义编译器 54 2.4.2 编译器架构 55 2.4.3 列表文件 58 2.4.4 专用编译器 59 2.5 执行环境 60 2.5.1 软件执行环境(虚拟机) 60 2.5.2 现代处理器的硬件执行环境 63 2.6 结论 68 第3章 Windows基础知识 69 3.1 组件及基本架构 70 3.1.1 简要回顾 70 3.1.2 特征 70 3.1.3 支持的硬件 71 3.2 内存管理 71 3.2.1 虚拟内存和分页 72 3.2.2 工作集 74 3.2.3 内核内存和用户内存 74 3.2.4 内核内存空间 75 3.2.5 区段对象 77 3.2.6 VAD树 78 3.2.7 用户模式的内存分配 78 3.2.8 内存管理API 79 3.3 对象与句柄 80 命名对象 81 3.4 进程与线程 83 3.4.1 进程 84 3.4.2 线程 84 3.4.3 运行状态切换 85 3.4.4 同步对象 86 3.4.5 进程初始化顺序 87 3.5 应用程序编程接口 88 3.5.1 Win32 API 88 3.5.2 本地API 90 3.5.3 系统调用机制 91 3.6 可执行文件格式 93 3.6.1 基本概念 93 3.6.2 映像区段(Image Sections) 95 3.6.3 区段对齐(Section Alignment) 95 3.6.4 动态链接库 96 3.6.5 头部 97 3.6.6 导入与导 99 3.6.7 目录 99 3.7 输入与输 103 3.7.1 I/O系统 103 3.7.2 Win32子系统 104 3.8 结构化异常处理 105 3.9 结论 107 第4章 逆向工具 109 4.1 不同的逆向方法 110 4.1.1 离线代码分析 110 4.1.2 现场代码分析 110 4.2 反汇编器——ILDasm 110 4.3 调试器 116 4.3.1 用户模式调试器 118 4.3.2 内核模式调试器 122 4.4 反编译器 129 4.5 系统监控工具 129 4.6 修补工具 131 Hex Workshop 131 4.7 其他类型的逆向工具 133 可执行程序转储工具 133 4.8 结论 138 第2部分 应用逆向 第5章 未公开的技术 141 5.1 逆向和互操作性 142 5.2 基本原则 142 5.3 定位未公开的API函数 143 我们要找什么? 144 5.4 案例研究:NTDLL.DLL的 5.4 Generic Table API 145 5.4.1 RtlInitializeGenericTable 146 5.4.2 RtlNumberGenericTableElements 151 5.4.3 RtlIsGenericTableEmpty 152 5.4.4 RtlGetElementGenericTable 153 5.4.5 RtlInsertElementGenericTable 168 5.4.6 RtlLookupElementGenericTable

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧