标题:请教: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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-232768-1-1.html




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

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