zoukankan      html  css  js  c++  java
  • Visual Studio 的 DllImport 缺陷

    在Visual Studio写cs文件,调用非托管的win32 api要用到DllImport ,比如

     1 using System;
     2 using System.Runtime.InteropServices;
     3 
     4 class Example
     5 {
     6     // Use DllImport to import the Win32 MessageBox function.
     7     [DllImport("user32.dll", CharSet = CharSet.Auto)]
     8     public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);
     9 
    10     static void Main()
    11     {
    12         // Call the MessageBox function using platform invoke.
    13         MessageBox(new IntPtr(0), "Hello World!""Hello Dialog"0);
    14     }
    15 }
    16 


     我常常有这样问题:

    DllImport和public static这2行中最重要的部分要手动敲进去,比如函数名MessageBox和参数列表(IntPtr hWnd, String text, String caption, uint type),为什么强大的Visual Studio不能自动完成?

    我觉得如果Visual Studio做的比较人性化的话,应该这样:

     在*.cs文件上点击右键,出来菜单“调用win api”或“DllImport”,弹出dll文件选择窗口(这里可以把常用win32 dll列出来,免得去system32里找),选择dll文件,确定,弹出dll的函数列表,每个函数名前面有个checkbox,选中checkbox,确定,自动将

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);

    插入到cs文件的头部,并且自动把函数的参数列表转换成csharp类型且填写完成,多爽,为什么ms没做,不应该是没想到。获取函数名可以使用 dumpbin /exports user32.dll link /dump /exports user32.dll 命令。

    最令我比较烦恼的是参数列表和参数类型。假如第三方厂商丢给你一个crypt.dll,没有文档,老板让你用c#调用crypt.dl实现产品的部分功能,即使我用了dumpbin 获取了函数列表,但是我不知道参数啊,是不是就无法完成了?还有,假如有些函数参数不是c#的基本数据类型,是不是也没办法做?大家说说看。

    本人菜鸟不才,请园友不吝赐教。

  • 相关阅读:
    【C/C++】qsort函数的使用方法和细节
    MOOC C++笔记(五):继承
    MOOC 数据库系统笔记(二):数据库系统的基本结构及其演变发展
    PTA A1015
    MOOC 数据库系统笔记(一):初步认识数据库系统
    PTA A1014
    MOOC C++笔记(四):运算符重载
    PTA A1013
    PTA A1011&A1012
    1.1.22 同样的文档,行数不一样
  • 原文地址:https://www.cnblogs.com/longware/p/1740157.html
Copyright © 2011-2022 走看看