• P/Invoke 技术


    .NET 互操作

      首先推荐一本书《精通.NET 互操作》 ,这本书是目前中文资料里讲 互操作最详尽的书了。

      做系统集成项目的同学应该都和设备打过交道(如视频设备:海康、大华等),在大多数情况下这些设备厂商会给系统集成厂商开发协议(dll 类库、 函数定义的头文件、测试程序、调用流程),这些协议的dll 大都用C++开发的,那么我们用C#集成,就得用 P/Invoke 技术(.NET 互操作的一种)

    一、P/Invoke 简单例子

      P/Invoke 说白了,就是你调用协议dll 的函数,传入正确的参数(注意C++与C#的数据类型转换)

      例子:

    复制代码
     1 using System.Runtime.InteropServices;
     2 
     3 class App
     4 {
     5     [DllImport("msvcrt.dll")]
     6     static extern int puts(string msg);
     7     
     8     [DllImport("msvcrt.dll")]
     9     static extern int _flushall();
    10     
    11     static void Main()
    12     {
    13         puts("Hello World");
    14         _flushall();
    15         CreateMsgWindow();
    16     }
    17     
    18     
    19     [DllImport("user32.dll",EntryPoint="MessageBox")]
    20     static extern int MessageBox(int hwnd,string lpText,string lpCaption,int wType);
    21         
    22     static void CreateMsgWindow()
    23     {
    24         MessageBox(0,"Hello world!","Welcome",0);
    25     }
    26 }
    复制代码

    二、两款 dll 函数查看工具

    1. Dll Export Viewer

    2. Dll 函数查看器 2.0

    三、C#与C++常见类型对比

    C++ 类型 C# 类型
    HANDLE (void *)括号内是等价类型 IntPtr
    Byte(unsigned char) byte
    SHORT(short) short
    WORD(unsigned short) short
    INT(int) int
    int* ref int
    UINT(unsigned int) int
    LONG(long) int
    ULONG(unsigned long)  uint
    DWORD(unsigned long) uint
    BOOL(long) bool
    PCAHR(char *) string
    char[] string
    PBYTE(byte *) byte[]
    结构体 publlic struct 结构体{}
    char **变量名 ref string 变量名

    结构体封装

     View Code

    附:

    1. 精通.NET 互操作 pdf 和 iso 下载

    2. Dll Export Viewer 下载

    3. Dll 函数查看器 2.0 下载

  • 相关阅读:
    window.showModalDialog使用手册
    javascrīpt 对象的定义
    导航上用CSS标志当前页效果的实现
    数据库中的命名规则
    Oracle数学函数
    实现 asp 的服务器无刷新推技术
    UML建模工具比较
    Oracle日期函数
    神秘的 ORACLE DUAL
    Podcast Publisher——一个综合了多种入门知识的小Web应用
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/11168217.html
Copyright © 2020-2023  润新知