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
    
  • 相关阅读:
    内联模板 C++快速入门46
    delphi演示程序
    delphi演示程序
    容器和算法 C++快速入门47
    Delphi7_Lite_Fullv7.3优化精简全功能版
    Delphi7_Lite_Fullv7.3优化精简全功能版
    容器和算法 C++快速入门47
    [转载 js]alt美化效果
    “谁动了我的奶酪?”的故事
    谁动了我的奶酪[续] 讨论
  • 原文地址:https://www.cnblogs.com/hualiu0/p/5079580.html
Copyright © 2011-2022 走看看