zoukankan      html  css  js  c++  java
  • .net IntPtr ==interoperable pointer

    调用system.runtime.interopservice,可以用dllimport;

    API函数主要在“kernel32.dll”、“user32.dll”、“GDI32.dll”,

    kernel32.dll,以调用它下面的LoadLibrary、GetProcAddress、FreeLibrary。查MSDN了解了三个函数的原型为:

    HMODULE LoadLibrary(LPCTSTR lpFileName);

    FARPROC GetProcAddress(HMODULE hModule, LPCWSTR lpProcName);

    BOOL FreeLibrary(HMODULE hModule);

    LoadLibrary需要的参数为要调用的DLL文件的名字,而它的返回值为这个DLL文件的句柄;

    GetProcAddress需要的参数一个为要调用的DLL的句柄,这个值

    由LoadLibrary的返回值提供,另一个参数为要调用该DLL文件中函数的名字。它的返回值为函数的指针;

    FreeLibrary需要的参数为调用的函数DLL文件的句柄,返回值为布尔型。

    note:查看api函数可使用vs的 dumpbin.exe

    简单来讲,IntPtr是一个Struct类型的指针的wrapper结构,是不同编程语言之间类型转换的处理代理。

    Marshal:中译空军司令,是远程对象的管理类,有各种操作可供选择。

    //字符串参数为IntPtr
    [DllImport("user32.dll")]
    public static extern int MessageBox(int hWnd, IntPtr text, IntPtr caption, uint type);
    
    void Main()
    {
    	//字符串
        var str = "hehe";
        //在非托管堆中创建指针
        var ptr = Marshal.StringToHGlobalAnsi(str);
        //平台调用MessageBoxA interactive pointer==intptr,uint 1,2,messagebox type;
        MessageBox(0, ptr, IntPtr.Zero, 2);
        //清理
        Marshal.FreeHGlobal(ptr);
    }
    
    // Define other methods and classes here
    
  • 相关阅读:
    Linux之apt-get无sudo权限安装软件
    Java stream 并发应用案例
    java 执行 shell脚本通过mysql load data导入数据
    修改mysql存储过程或函数的定义着
    [ERR] 1118
    定时杀死mysql中sleep的进程
    centos7安装配置MariaDB10
    Tomcat设置JVM参数
    通Shell获取Tomcat进程号并杀死进程
    对于之前已经push的项目增加.gitignore配置文件不起作用的处理
  • 原文地址:https://www.cnblogs.com/hualiu0/p/5079580.html
Copyright © 2011-2022 走看看