• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            C++ Programmer's Cookbook

            {C++ 基礎(chǔ)} {C++ 高級(jí)} {C#界面,C++核心算法} {設(shè)計(jì)模式} {C#基礎(chǔ)}

            struct在p/invoke中的轉(zhuǎn)化


            在msdn上發(fā)現(xiàn)很好的實(shí)例,與大家共享!

            enum調(diào)用實(shí)例:
            // Unions.cs

            using System;
            using System.Runtime.InteropServices;

            /*
            union MYUNION
            {
                
            int i;
                
            double d;
            };
            */

            [ StructLayout( LayoutKind.Explicit )]
            public struct MyUnion 
            {
                [ FieldOffset( 
            0 )]
                
            public int i;
                [ FieldOffset( 
            0 )]
                
            public double d;
            }

            /*
            union MYUNION2
            {
                
            int i;
                char str[
            128];
            };
            */

            [ StructLayout( LayoutKind.Explicit, Size
            =128 )]
            public struct MyUnion2_1 
            {    
                [ FieldOffset( 
            0 )]
                
            public int i;
            }

            [ StructLayout( LayoutKind.Sequential )]
            public struct MyUnion2_2 
            {    
                [ MarshalAs( UnmanagedType.ByValTStr, SizeConst
            =128 )] 
                
            public String str;
            }

            public class LibWrap
            {
                
            // void TestUnion(MYUNION u, int type)
                
                [ DllImport( 
            "..\\LIB\\PinvokeLib.dll" )]
                
            public static extern void TestUnion( MyUnion u, int type );
                
                
            // void TestUnion( MYUNION u, int type )
                
                [ DllImport( 
            "..\\LIB\\PinvokeLib.dll" )]
                
            public static extern void TestUnion2( MyUnion2_1 u, int type );
                
                
            // void TestUnion(MYUNION u, int type)
                
                [ DllImport( 
            "..\\LIB\\PinvokeLib.dll" )]
                
            public static extern void TestUnion2( MyUnion2_2 u, int type );        
            }

            public class App
            {
                
            public static void Main()
                {
                    MyUnion mu 
            = new MyUnion();
                    mu.i 
            = 99;
                    LibWrap.TestUnion( mu, 
            1 );
                    
                    mu.d 
            = 99.99;
                    LibWrap.TestUnion( mu, 
            2 );
                    
                    MyUnion2_1 mu2_1 
            = new MyUnion2_1();
                    mu2_1.i 
            = 99;
                    LibWrap.TestUnion2( mu2_1, 
            1 );
                    
                    MyUnion2_2 mu2_2 
            = new MyUnion2_2();
                    mu2_2.str 
            = "*** string ***";
                    LibWrap.TestUnion2( mu2_2, 
            2 );        
                }
            }

            struct調(diào)用實(shí)例:
            // Structs.cs

            using System;
            using System.Runtime.InteropServices;

            /*
            typedef struct _MYPERSON
            {
                char
            * first; 
                char
            * last; 
            } MYPERSON, 
            *LP_MYPERSON;
            */

            [ StructLayout( LayoutKind.Sequential, CharSet
            =CharSet.Ansi )]
            public struct MyPerson 
            {
                
            public String first; 
                
            public String last;
            }

            /*
            typedef struct _MYPERSON2
            {
                MYPERSON
            * person;
                
            int age; 
            } MYPERSON2, 
            *LP_MYPERSON2;
            */

            [ StructLayout( LayoutKind.Sequential )]
            public struct MyPerson2 
            {
                
            public IntPtr person;
                
            public int age;
            }

            /*
            typedef struct _MYPERSON3
            {
                MYPERSON person;
                
            int age; 
            } MYPERSON3;
            */

            [ StructLayout( LayoutKind.Sequential )]
            public struct MyPerson3 
            {
                
            public MyPerson person;
                
            public int age;
            }

            /*
            typedef struct _MYARRAYSTRUCT
            {
                bool flag;
                
            int vals[ 3 ]; 
            } MYARRAYSTRUCT;
            */

            [ StructLayout( LayoutKind.Sequential )]
            public struct MyArrayStruct 
            {
                
            public bool flag;
                [ MarshalAs( UnmanagedType.ByValArray, SizeConst
            =3 )] 
                
            public int[] vals;
            }

            public class LibWrap
            {
                
            // int TestStructInStruct(MYPERSON2* pPerson2);
                
                [ DllImport( 
            "..\\LIB\\PinvokeLib.dll" )]
                
            public static extern int TestStructInStruct( ref MyPerson2 person2 );
                
                
            // void TestStructInStruct3(MYPERSON3 person3)
                
                [ DllImport( 
            "..\\LIB\\PinvokeLib.dll" )]
                
            public static extern int TestStructInStruct3( MyPerson3 person3 );    
                
                
            // void TestArrayInStruct( MYARRAYSTRUCT* pStruct );
                
                [ DllImport( 
            "..\\LIB\\PinvokeLib.dll" )]
                
            public static extern int TestArrayInStruct( ref MyArrayStruct myStruct );    
            }

            public class App
            {
                
            public static void Main()
                {
                    
            // ******************* structure with pointer to other structure ************
                    MyPerson personName;
                    personName.first 
            = "Sue";
                    personName.last 
            = "Black";
                    
                    MyPerson2 personAll;
                    personAll.age 
            = 30;
                    
                    IntPtr buffer 
            = Marshal.AllocCoTaskMem( Marshal.SizeOf( personName ));
                    Marshal.StructureToPtr( personName, buffer, 
            false );
                    
                    personAll.person 
            = buffer;
                    
                    Console.WriteLine( 
            "\nPerson before call:" );
                    Console.WriteLine( 
            "first = {0}, last = {1}, age = {2}"
                        personName.first, personName.last, personAll.age ); 
                    
                    
            int res = LibWrap.TestStructInStruct( ref personAll );
                    
                    MyPerson personRes 
            = 
                        (MyPerson)Marshal.PtrToStructure( personAll.person, typeof( MyPerson ));
                    
                    Marshal.FreeCoTaskMem( buffer );
                    
                    Console.WriteLine( 
            "Person after call:" );
                    Console.WriteLine( 
            "first = {0}, last = {1}, age = {2}"
                        personRes.first, personRes.last, personAll.age );
                    
                    
            // ******************* structure with embedded structure ************    
                    MyPerson3 person3 
            = new MyPerson3();
                    person3.person.first 
            = "Marie";
                    person3.person.last 
            = "Claire";
                    person3.age 
            = 27;
                    
                    LibWrap.TestStructInStruct3( person3 );
                    
                    
            // ******************* structure with embedded array ************    
                    MyArrayStruct myStruct 
            = new MyArrayStruct();
                    
                    myStruct.flag 
            = false;
                    myStruct.vals 
            = new int3 ];
                    myStruct.vals[ 
            0 ] = 1;
                    myStruct.vals[ 
            1 ] = 4;
                    myStruct.vals[ 
            2 ] = 9;
                    
                    Console.WriteLine( 
            "\nStructure with array before call:" );
                    Console.WriteLine( myStruct.flag );
                    Console.WriteLine( 
            "{0} {1} {2}", myStruct.vals[ 0 ], 
                        myStruct.vals[ 
            1 ], myStruct.vals[ 2 ] );
                    
                    LibWrap.TestArrayInStruct( ref myStruct );
                    
                    Console.WriteLine( 
            "\nStructure with array after call:" );
                    Console.WriteLine( myStruct.flag );
                    Console.WriteLine( 
            "{0} {1} {2}", myStruct.vals[ 0 ], 
                        myStruct.vals[ 
            1 ], myStruct.vals[ 2 ] );        
                }
            }

            其他的API,string,數(shù)組的調(diào)用實(shí)例:請(qǐng)下載:PlatformInvoke實(shí)例。

            posted on 2007-06-04 23:34 夢(mèng)在天涯 閱讀(2232) 評(píng)論(3)  編輯 收藏 引用 所屬分類: CPlusPlusC#/.NET

            評(píng)論

            # re: struct在p/invoke中的轉(zhuǎn)化 2007-06-04 23:35 夢(mèng)在天涯

            DLL文件:http://msdn2.microsoft.com/zh-cn/library/as6wyhwt(VS.80).aspx  回復(fù)  更多評(píng)論   

            # re: struct在p/invoke中的轉(zhuǎn)化 2007-06-04 23:38 夢(mèng)在天涯

            C#的調(diào)用文件:http://msdn2.microsoft.com/zh-cn/library/hk9wyw21(VS.80).aspx  回復(fù)  更多評(píng)論   

            # re: struct在p/invoke中的轉(zhuǎn)化 2007-06-04 23:50 夢(mèng)在天涯

            更多其他的封裝的實(shí)例:可以msdn查找:封送類、結(jié)構(gòu)和聯(lián)合

            http://msdn2.microsoft.com/zh-cn/library/eshywdt7(VS.80).aspx  回復(fù)  更多評(píng)論   

            公告

            EMail:itech001#126.com

            導(dǎo)航

            統(tǒng)計(jì)

            • 隨筆 - 461
            • 文章 - 4
            • 評(píng)論 - 746
            • 引用 - 0

            常用鏈接

            隨筆分類

            隨筆檔案

            收藏夾

            Blogs

            c#(csharp)

            C++(cpp)

            Enlish

            Forums(bbs)

            My self

            Often go

            Useful Webs

            Xml/Uml/html

            搜索

            •  

            積分與排名

            • 積分 - 1804603
            • 排名 - 5

            最新評(píng)論

            閱讀排行榜

            大香伊人久久精品一区二区| 久久人妻无码中文字幕| 日韩精品久久久久久免费| 少妇久久久久久被弄到高潮| 久久九九亚洲精品| 免费观看成人久久网免费观看| 日韩乱码人妻无码中文字幕久久 | 国内精品综合久久久40p| 久久久久久国产精品免费免费| 日本精品久久久久中文字幕| 99精品久久精品一区二区| 97精品久久天干天天天按摩| 色狠狠久久AV五月综合| 久久久久久久亚洲Av无码| 人妻精品久久久久中文字幕一冢本| 2020国产成人久久精品| 99久久精品国产一区二区| 99精品国产综合久久久久五月天| 亚洲伊人久久精品影院| 精品国产乱码久久久久久郑州公司| 久久精品无码午夜福利理论片 | 97久久超碰国产精品2021| 精品久久久久久国产| 国产高潮国产高潮久久久91| 久久久久久毛片免费看| 久久久久久久波多野结衣高潮| 婷婷久久久亚洲欧洲日产国码AV| 久久久久亚洲精品天堂| 久久精品国产99国产精偷 | 久久久久久亚洲精品不卡| 亚洲国产成人久久综合碰| 亚洲乱码中文字幕久久孕妇黑人| 久久不见久久见免费视频7| 青青青国产精品国产精品久久久久| 久久电影网| 久久婷婷五月综合97色一本一本 | 欧美粉嫩小泬久久久久久久| 久久婷婷色综合一区二区| 2020久久精品国产免费| 欧美粉嫩小泬久久久久久久| 久久狠狠高潮亚洲精品|