日期:2014-05-17  浏览次数:20757 次

C# 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
这是一个接口的方法

int ReadBaseInfos( char * Name, char * Gender, char * Folk,
char *BirthDay, char * Code, char * Address,char *Agency, char * ExpireStart,char* ExpireEnd) 

我在C#中调用,ReadBaseInfos方法第一次调用正常,第二次调用提示"尝试读取或写入受保护的内存。这通常指示其他内存已损坏。"

[DllImport("Sdtapi.dll")]
private static extern int ReadBaseInfos(StringBuilder Name, StringBuilder Gender, StringBuilder Folk, StringBuilder BirthDay, StringBuilder Code, StringBuilder Address, StringBuilder Agency, StringBuilder ExpireStart, StringBuilder ExpireEnd);


谁能帮解一下~!

------解决方案--------------------
http://www.cnblogs.com/yiki/archive/2008/10/29/1321848.html

数据类型问题,

如果第一次调用正常,第二次调用失败检查是不是open 之后没有close (个人判断)
------解决方案--------------------
数据类型没有匹配吧


------解决方案--------------------
保证每个StringBuilder 的实例的Capacity足够的大
第一次调用成功后看下每个StringBuilder 的Capacity是否有变小,如果有变小就调整到足够大
------解决方案--------------------
[DllImport("sdtapi.dll", EntryPoint = "ReadBaseInfos",//读取卡中基本信息 
                CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] 
        public static extern int ReadBaseInfos(StringBuilder Name, StringBuilder Gender, StringBuilder Folk, StringBuilder BirthDay, 
            StringBuilder Code, StringBuilder Address, StringBuilder Agency, StringBuilder ExpireStart, StringBuilder ExpireEnd); 
设置StringBuilder 的大小
------解决方案--------------------
引用:
C# code

while (RunScan)
{
  try