• <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>
            隨筆 - 42  文章 - 3  trackbacks - 0
            <2013年6月>
            2627282930311
            2345678
            9101112131415
            16171819202122
            23242526272829
            30123456

            常用鏈接

            留言簿(2)

            隨筆檔案

            文章檔案

            網頁收藏

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜


            This note is about book .NET and COM.

            Think of XML Web services simply as components or Application Programming Interfaces (APIs) exposed on a Web site rather than a DLL residing on your own computer.

            An assembly is a self-describing logical component. Assemblies are units of deployment, units of security, units of versioning, and units of scope for the types contained within. Although an assembly is typically one executable or one DLL, it could be made up of multiple files. 

            Any assemblies with type definitions contain corresponding type information describing them. This information is called metadata (data about data). 

            Reflection
             is the process of programmatically obtaining type information. Programs can dynamically inspect (“reflect upon”) the metadata for any assemblies, dynamically instantiate objects and invoke members, and even emit metadata dynamically (a technology called Refection Emit). Reflection provides late binding facilities like COM’s IDispatch and IDispatchEx interfaces, type inspection like COM’s ITypeInfo and ITypeInfo2 interfaces, and much more.

            How Unmanaged Code Interacts with Managed Code

            Three technologies exist that enable the interaction between unmanaged and managed code:

            • Platform Invocation Services (PInvoke)

               1 static class GameSharp
               2 {
               3     /// The native methods in the DLL's unmanaged code.
               4     internal static class UnsafeNativeMethods
               5     {
               6     const string _dllLocation = "CoreDLL.dll";
               7     [DllImport(_dllLocation)]
               8     public static extern void SimulateGameDLL(int a, int b);
               9     }
              10 }

              Choosing a Calling Convention

              The calling convention of an entry point can be specified using another DllImportAttribute named parameter, called CallingConvention. The choices for this are as follows:

              • CallingConvention.Cdecl. The caller is responsible for cleaning the stack. Therefore, this calling convention is appropriate for methods that accept a variable number of parameters (like printf).

              • CallingConvention.FastCall. This is not supported by version 1.0 of the .NET Framework.

              • CallingConvention.StdCall. This is the default convention for PInvoke methods running on Windows. The callee is responsible for cleaning the stack.

              • CallingConvention.ThisCall. This is used for calling unmanaged methods defined on a class. All but the first parameter is pushed on the stack since the first parameter is the this pointer, stored in the ECX register.

              • CallingConvention.Winapi. This isn’t a real calling convention, but rather indicates to use the default calling convention for the current platform. On Windows (but not Windows CE), the default calling convention is StdCall.

              Declare always uses Winapi, and the default for DllImportAttribute is also Winapi. As you might guess, this is the calling convention used by Win32 APIs, so this setting doesn’t need to be used in this chapter’s examples.

               1 using System;
               2 using System.Runtime.InteropServices;
               3 
               4 public class LibWrap
               5 {
               6 // C# doesn't support varargs so all arguments must be explicitly defined. 
               7 // CallingConvention.Cdecl must be used since the stack is  
               8 // cleaned up by the caller. 
               9 
              10 // int printf( const char *format [, argument] )
              11 
              12 [DllImport("msvcrt.dll", CharSet=CharSet.Unicode, CallingConvention=CallingConvention.Cdecl)]
              13 public static extern int printf(String format, int i, double d); 
              14 
              15 [DllImport("msvcrt.dll", CharSet=CharSet.Unicode, CallingConvention=CallingConvention.Cdecl)]
              16 public static extern int printf(String format, int i, String s); 
              17 }
              18 
              19 public class App
              20 {
              21     public static void Main()
              22     {
              23         LibWrap.printf("\nPrint params: %i %f", 99, 99.99);
              24         LibWrap.printf("\nPrint params: %i %s", 99, "abcd");
              25     }
              26 }
            • Mixed-Mode Programming Using Managed Extensions to C++

            • COM Interoperability

                     

                  Good COM server implementation in C#

                  Building COM Objects in C#

                 Building COM Servers in .NET








            posted on 2013-06-27 03:32 鷹擊長空 閱讀(335) 評論(0)  編輯 收藏 引用
            久久久亚洲AV波多野结衣| 亚洲va中文字幕无码久久不卡| 久久天天躁狠狠躁夜夜躁2014| 青青草原综合久久大伊人导航| 婷婷国产天堂久久综合五月| 久久久无码人妻精品无码| 久久精品国产精品亚洲精品| 9191精品国产免费久久| 久久久久久无码国产精品中文字幕 | 欧美熟妇另类久久久久久不卡| AV狠狠色丁香婷婷综合久久| 婷婷久久综合| 久久久噜噜噜久久中文福利| 精品久久久久久无码国产| 久久人人爽人人爽人人片av高请| 国产精品久久久久久搜索| 亚洲午夜久久久久久久久电影网| 欧美性大战久久久久久| 久久久久亚洲精品天堂| 日本欧美国产精品第一页久久| 91久久婷婷国产综合精品青草 | 一本色道久久88综合日韩精品 | 久久精品国产福利国产秒| 伊人久久大香线蕉综合5g| 亚洲国产成人久久综合一| 中文无码久久精品| 国产精品久久久久a影院| 久久精品18| 国产精品久久久久9999高清| 伊人久久大香线蕉综合Av| 婷婷久久综合| 亚洲欧美久久久久9999| 日批日出水久久亚洲精品tv| 一本大道加勒比久久综合| 国产精品无码久久综合| 性欧美大战久久久久久久久| 久久婷婷国产剧情内射白浆| 国内精品伊人久久久久妇| 久久受www免费人成_看片中文| 欧美国产成人久久精品| 狠狠色噜噜色狠狠狠综合久久|