• .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
    
  • 相关阅读:
    适配器
    策略
    oom的各种情况
    sql 优化//TODO
    聚簇索引和非聚簇索引
    Shard内部原理
    es集群健康状态
    转载 R语言颜色基础设置
    三维数据的展示
    python 文件保存 出错
  • 原文地址:https://www.cnblogs.com/hualiu0/p/5079580.html
Copyright © 2020-2023  润新知