以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助]尝试读取或写入受保护的内存。这通常指示其他内存已损坏 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=130430) |
||||
-- 作者:chnfo -- 发布时间:2019/1/22 0:01:00 -- [求助]尝试读取或写入受保护的内存。这通常指示其他内存已损坏 有一个计划任务,定期执行,设定的间隔时间为1秒。 执行过程中,有时候会报出错误 --------------------------- 版本:2018.10.9.1 --------------------------- 代码执行出错,错误信息: System.AccessViolationException: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。 在 UserCode.自定义函数XX 在 UserCode.Test() 这个跟什么有关? 是执行频率太高了还是怎么的? |
||||
-- 作者:有点甜 -- 发布时间:2019/1/22 9:42:00 -- 1、可以把间隔弄大一点测试;
2、进入执行的时候,有可能计划需要执行的时间超过1秒,超过1秒后,又会重新开启一个或者多个计划,导致冲突的。
进入计划后,把计划关闭,如 mytimers("计划1").Enabled = False
执行到最后,写代码开启 mytimers("计划1").Enabled = True |
||||
-- 作者:chnfo -- 发布时间:2019/1/22 14:10:00 -- 本来是去检查锁在不在,用时会很短的,但是调了间隔10分钟,还是会报错。 另外,本来就是在项目管理-计划管理中增加的计划,如何让它停止又重启啊 |
||||
-- 作者:有点甜 -- 发布时间:2019/1/22 14:24:00 -- 在计划那里写代码,如
mytimers("计划1").Enabled = False \'本来代码 mytimers("计划1").Enabled = true |
||||
-- 作者:chnfo -- 发布时间:2019/1/23 19:44:00 -- 实际检查了一下,运行结果与设置间隔时间有关,但更大的问题是调用外部的dll 为了测试加密狗的应用,用了ET99加密锁。------如果有使用过这个狗的,更请指教。 但实际测试过程中,按步骤找到狗、打开狗都没有问题,但在第三步做用户PIN验证时,就报出错误如下: 版本:2018.10.9.1 代码执行出错,错误信息: System.AccessViolationException: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。 在 UserCode.et_Verify(Int64 et99handle, Int32 et99flag, String& et99pin) 在 UserCode.Test() 经过咨询狗的厂商客服,他们表示在多种环境下,包括Delphi、VB、foxpro等都没有任何问题,而且我用他们的示例文件也运行正常。 那么,这个问题在哪里呢?
补充:我的电脑Win10操作系统,另一台WIn7操作系统,均是64位。 win10是framework4.7 [此贴子已经被作者于2019/1/23 21:12:54编辑过]
|
||||
-- 作者:有点甜 -- 发布时间:2019/1/23 21:25:00 -- 我没有插上加密狗,测试没有报错。
你试试改成这样测试
Declare Function et_Verify Lib "FT_ET99_API.dll" (ByVal et99handle As Long, ByVal et99flag As Integer, ByRef et99pin As Stringbuilder) As Long
-----------------
Dim PID As String = "1Q2W3E4R" \'这是随便写的8位字符串,它要用狗的产生方法产生,在没插狗的情况下,本无意义 et_FindToken(pid , n ) et_OpenToken(hl , pid , 1) Dim sb As new Stringbuilder
|
||||
-- 作者:chnfo -- 发布时间:2019/1/23 21:44:00 -- 这个逻辑是这样的 1、et_findtoken(PID,count),PID是输入值,输出值是count,也就是检测匹配上PID的狗的数量 2、et_OpenToken(hl , pid , 1),第一个参数hl是输出值,它是句柄;第二个参数值是狗的PID,第三个参数值是第几个狗 -----这两步都执行正常。 3、et_Verify(hl , 0, sb),第一个参数是用到第二步输出的句柄,第二个参数0是输入值,是确定是普通用户还是超级用户,第三个sb是输入值,是生成狗的PID时用到的用户参数PIN -----甜兄,按你的做法,还是不行,仍然报错,报的错是完全一样的 在不插入狗的情况下,就是不做任何改动,我上传的附件可以也是可以走完的。 实际上这个逻辑并不是这么简单,本来是这么写的 et_findtoken(PID,count) if count > 0 then if et_OpenToken(hl , pid , 1) = 0 then output.show("打开狗失败") else if et_Verify(hl , 0, sb) > 0 then output.show("校验成功") else output.show("校验失败") end if end if else output.show("没找到狗") end if
[此贴子已经被作者于2019/1/23 21:55:39编辑过]
|
||||
-- 作者:chnfo -- 发布时间:2019/1/23 21:53:00 --
这是厂家官网给出的VB示例,就是用来做狗的相关设置的。 我这里插上狗后,从头到尾测试都正常。
|
||||
-- 作者:chnfo -- 发布时间:2019/1/23 21:53:00 --
这是厂家官网给出的VB示例,就是用来做狗的相关设置的。 我这里插上狗后,从头到尾测试都正常。
|
||||
-- 作者:有点甜 -- 发布时间:2019/1/23 22:04:00 -- 有没有c#的实例?
|