| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1934 人关注过本帖
标题:请教:c# 平台调用复杂结构体 非托管 DLL
只看楼主 加入收藏
淮北橘子
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-9-11
收藏
 问题点数:0 回复次数:2 
请教:c# 平台调用复杂结构体 非托管 DLL
c中的定义:
typedef struct _test
{
    int* a;
    int size1;
    int size2;
}test;
c#中定义:
    public class test
        {            
            [MarshalAs(UnmanagedType.ByValArray/*, SizeConst = IMAGE_SIZE*/)]
            public int[] a;
            [MarshalAs(UnmanagedType.I4)]
            public int size1;
            [MarshalAs(UnmanagedType.I4)]
            public int size2;
        }


    private static void ss()
        {
           test t = new test();
           t.a = new int[IMAGE_SIZE];
            for (int i = 0; i < IMAGE_SIZE; i++)
                t.a[i] =i;
            t.size1 = 3;
            t.size2 = 5;
            testfun(t);
            //IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(t));
            //Marshal.StructureToPtr(t, ptr, true);
            //testfun(ptr);
            
            //test tt =(test)Marshal.PtrToStructure(ptr, typeof(test));
         
            //MessageBox.Show(tt.a[0].ToString());
            //MessageBox.Show(tt.b);
            //Marshal.FreeHGlobal(ptr);
        }

不知那里出了问题,传值一直有问题,数组可以传递,但是两个整形则传不过去,是一个很大的整数。请问问题出在那里?
搜索更多相关主题的帖子: 结构体 DLL 平台 托管 
2008-09-11 20:41
淮北橘子
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-9-11
收藏
得分:0 
[DllImport("FaceLib.dll", EntryPoint = "testfun", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
        public static extern int testfun(test s);
2008-09-11 20:42
淮北橘子
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-9-11
收藏
得分:0 
出现的错误是:
尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
2008-09-11 20:43
快速回复:请教:c# 平台调用复杂结构体 非托管 DLL
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015154 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved