• C#使用技巧调用DLL(还是转贴哦!)


    使用C#时不免用调用别的DLL,如WIN32的API和自己以前做的DLL,
    C#调用DLL很像VB,下面讨论的C#调用DLL的方式。
    看看下面的例子,演示了怎么定义DLL函数接口
    ---------------------
    using System;
    using System.Runtime.InteropServices;

    public class Utility
    {
       [DllImport("kernel32",EntryPoint="CreateDirectory",CallingConvention=CallingConvention.StdCall)]
       public static extern bool Create (string name);
     
       [DllImport("User32",EntryPoint="MessageBox",CallingConvention=CallingConvention.StdCall)]
       public static extern int MsgBox (string msg);
    }
     
    class MyClass
    {
       public static int Main()
       {
          string myString;
          Console.Write("Enter your message: ");
          myString = Console.ReadLine();
          return Utility.MsgBox(myString);
       }

    ------------------------------------------  
    值得注意的是,缺省的调用规则(CallingConvention)是Stdcall,同Winapi,在
    C++里是__stdcall的形式,函数入口(EntryPoint)缺省是同名,如CreateDirectory
    的定义也可以为
       [DllImport("kernel32")]
       static extern bool CreateDirectory(string name, SecurityAttributes sa);
      
    WIN32 API原型为
    BOOL CreateDirectory(
      LPCTSTR lpPathName,                         // directory name
      LPSECURITY_ATTRIBUTES lpSecurityAttributes  // SD
    );
      
    在调用WIN32 API时注意那些类型的转换,如结构(struct)、指针(pointer),

    有关各种语言之间类型转换和DllImport属性的详细信息可以参考S


    ------------------------------------------------
    转贴者的话:
    1、这个实例,我csc了,执行时报错!我不知道原因!有人知道了,给我指点一下!不胜感激哦!^_^!
    2、不是我不想转完,只是没有办法,人家的文章就到此为止了!!^_^!
    不过至少为我了解调用DLLImport的一点内容,只是我也感到可惜的是:“DllImport属性的详细信息可以参考S”,居然没有了?NND,说句粗话!我其实也很想知道后面到底说了什么?????晕!

  • 相关阅读:
    ASP.NET 防盗链的实现[HttpHandler]
    html打印表格每页都有的表头和打印分页
    spring是怎样管理mybatis的及注入mybatis mapper bean的
    浅谈Log4j和Log4j2的区别
    git tag — 标签相关操作
    java cocurrent包
    线程实现异步
    使用Shell脚本查找程序对应的进程ID,并杀死进程
    shell脚本监测文件变化
    spring boot的几种配置类型
  • 原文地址:https://www.cnblogs.com/macleo/p/582327.html
Copyright © 2020-2023  润新知