毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> net技术 >> 正文

AccessViolationException异常正在访问不可读写的内存

更新时间:2014-11-14:  来源:毕业论文

现在用C#调用不知道是C还是C++写的DLL库,涉及到结构体嵌套时参数传递的问题,在网上找了各种方法都跟我这个不太一样,也试了各种方法都过不去,求助。
c++结构体如下,DLL无法改写。

C/C++ code
 
//被嵌套结构体
typedef struct {
CHAR   a[ 19 ];
CHAR   b;
WORD  c;
} OBE, *LPOBE;
 
//外层结构体
typedef struct {
DWORD   d;
OBE ObeInfo;
} CARD, *LPCARDT;


尝试了C#的结构体定义如下:
C# code

//被嵌套结构体
[StructLayout(LayoutKind.Sequential)]
public struct OBE{
[MarshalAs(UnmanagedType.ByValArray,SizeConst=19)]
public char[] a;
public char b;
public uint16 c;

 
//外层结构体
[StructLayout(LayoutKind.Sequential)]
public struct CARD{
public uint d;
//这个地方不知道怎么写了!!!
[MarshalAs(UnmanagedType.Struct)]
public OBE ObeInfo;
}


报AccessViolationException异常,提示我正在访问不可读写的内存。
CHAR -> byte
StructLayout的约定最好声明完整
例如
C# code
 
 [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

在结构体中嵌套结构体,没有特殊的写法
直接写就可以

C# code
 public struct SServer
    {
       public SAdvance m_advanceCfg;
    }

char[] 也可以用string来对应
C# code
 
         [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 19)]
        public string mStrTemp;

把char改为byte就对了。其它的看似正常

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。