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
    
  • 相关阅读:
    org.dom4j.Document相关操作api
    生成excel
    Maven
    Excel操作
    常用正则
    csv
    导出txt
    Map中的key值按字典排序,客户端发送http请求
    HmacSHA256签名加Base64编码加URL编码
    5.1SpringAOP-基础(装饰者,静态代理,JDKD动态代理,CGLIB动态代理)
  • 原文地址:https://www.cnblogs.com/hualiu0/p/5079580.html
Copyright © 2011-2022 走看看