Foxtable(狐表)用户栏目专家坐堂 → [求助]尝试读取或写入受保护的内存。这通常指示其他内存已损坏


  共有5409人关注过本帖树形打印复制链接

主题:[求助]尝试读取或写入受保护的内存。这通常指示其他内存已损坏

帅哥哟,离线,有人找我吗?
chnfo
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2243 积分:18477 威望:0 精华:0 注册:2011/11/26 20:21:00
[求助]尝试读取或写入受保护的内存。这通常指示其他内存已损坏  发帖心情 Post By:2019/1/22 0:01:00 [显示全部帖子]

有一个计划任务,定期执行,设定的间隔时间为1秒。
执行过程中,有时候会报出错误

---------------------------
版本:2018.10.9.1
---------------------------
代码执行出错,错误信息:



System.AccessViolationException: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

   在 UserCode.自定义函数XX

   在 UserCode.Test()


这个跟什么有关?
是执行频率太高了还是怎么的?

 回到顶部
帅哥哟,离线,有人找我吗?
chnfo
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2243 积分:18477 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2019/1/22 14:10:00 [显示全部帖子]

本来是去检查锁在不在,用时会很短的,但是调了间隔10分钟,还是会报错。 另外,本来就是在项目管理-计划管理中增加的计划,如何让它停止又重启啊

 回到顶部
帅哥哟,离线,有人找我吗?
chnfo
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2243 积分:18477 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By: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等都没有任何问题,而且我用他们的示例文件也运行正常。
那么,这个问题在哪里呢?
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:et99cs.zip


补充:我的电脑Win10操作系统,另一台WIn7操作系统,均是64位。
win10是framework4.7
[此贴子已经被作者于2019/1/23 21:12:54编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
chnfo
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2243 积分:18477 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By: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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2243 积分:18477 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2019/1/23 21:53:00 [显示全部帖子]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:et99_sample_vb.zip

这是厂家官网给出的VB示例,就是用来做狗的相关设置的。
我这里插上狗后,从头到尾测试都正常。

 回到顶部
帅哥哟,离线,有人找我吗?
chnfo
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2243 积分:18477 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2019/1/23 21:53:00 [显示全部帖子]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:et99_sample_vb.zip

这是厂家官网给出的VB示例,就是用来做狗的相关设置的。
我这里插上狗后,从头到尾测试都正常。

 回到顶部
帅哥哟,离线,有人找我吗?
chnfo
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2243 积分:18477 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2019/1/24 9:15:00 [显示全部帖子]

有。可以去它的官网www.jansh.com.cn下载,好像点资源下载可以进去。我现在用的手机。下载ET99的压缩包,samples\protection\et99_sample_csharp.zip
[此贴子已经被作者于2019/1/24 9:44:01编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
chnfo
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2243 积分:18477 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2019/1/24 10:05:00 [显示全部帖子]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:c#窗口文件转成vb.txt

这个还真不会。它有几个文件,不知道要用哪个

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:c#定义的函数转成vb.txt

而且转换以后,一开始就是命名空间,然后里面有的一些数据类型的设置在FT中就执行不了,比如uinteger

看了一下C#的示例文件,里面包含函数的也就是其中两个文件了。一个是ET99_API.cs,一个是frmET99API.cs,把里面的代码都转成VB了,就是上面的两个文件
[此贴子已经被作者于2019/1/24 10:27:41编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
chnfo
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2243 积分:18477 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2019/1/24 10:32:00 [显示全部帖子]

Function et_OpenToken(ByRef hHandle As IntPtr, ByVal pid As Byte(), ByVal index As Integer) As UInteger
---提示错误
编译错误:语句不能出现在方法体内。假定为方法末尾。
错误代码:Function et_OpenToken(ByRef hHandle As IntPtr, ByVal pid As Byte(), ByVal index As Integer) As UInteger

另外,象下面的这样的怎么转?
Function MD5_HMAC(ByVal pucText As Byte(), ByVal ulText_Len As Byte, ByVal pucKey As Byte(), ByVal ulKey_Len As Byte,
<MarshalAs(UnmanagedType.LPArray, SizeParamIndex:=32)> ByVal pucToenKey As Byte(),
<MarshalAs(UnmanagedType.LPArray, SizeParamIndex:=16)> ByVal pucDigest As Byte()) As UInteger


 回到顶部
帅哥哟,离线,有人找我吗?
chnfo
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2243 积分:18477 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2019/1/24 11:08:00 [显示全部帖子]

不行。报错了 Byte的1维数组的值无法转换为string 错误代码:result=et_opentoken(Hhandle,bytpid,index)

 回到顶部
总数 13 1 2 下一页