.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
时间: 2024-11-03 21:46:18

.net IntPtr ==interoperable pointer的相关文章

自动立体车库控制应用系统

自动立体车库控制应用系统主要控制界面如下 系统主要包含两个部分: 第一部分是系统与PLC系列进行通信,实时采集现场控制信息,控制提升机及运输小车,完成多个设备之间互锁,保证系统安全有效运行.实时采集现场2000多个点信息,同时保存在数据库. 第二部分是管理所有车位信息.高效规划入出库路径,最大化提高系统高效. 下面是数据库操作部分代码 using System; using System.Text.RegularExpressions; using System.Xml.XPath; using

CSharpGL(36)通用的非托管数组排序方法

如果OpenGL要渲染半透明物体,一个方法是根据顶点到窗口的距离排序,按照从远到近的顺序依次渲染.所以本篇介绍对 UnmanagedArray<T> 进行排序的几种方法. +BIT祝威+悄悄在此留下版了个权的信息说: UnmanagedArray<T> 首先重新介绍一下非托管数组这个东西.一个 UnmanagedArray<float> 与一个 float[] 是一样的用处,只不过 UnmanagedArray<float> 是用 Marshal.Alloc

C# windows服务启动winform程序不显示UI问题解决

由于工作需要写一个解决winform程序自动更新下载重启的自动更新程序,之前用控制台全部实现,然而换成windows  service出现了两个问题,一个是路径问题(http://baidu.com),一个是服务启动其他winform程序不显示UI问题. 本篇解决UI显示问题. 以下为引用尤尼博文(原文地址:http://www.cnblogs.com/luxilin/p/3347212.html): 我开发的系统中有一接口程序(这里就称Task,是一个C#的Console Applicatio

VB.NET自动操作其他程序(4)--读取、设置其他软件listview控件的内容

4.3.读取其他软件listview控件的内容 4.3.0.根据窗口句柄,获取进程Id,打开并插入进程,申请代码的内存区,返回申请到的虚拟内存首地址        Dim processId As Integer         '进程pid           hwnd = FindWindow("#32770", "Windows 任务管理器")       '获取任务管理器窗口句柄,注释By Lyh         hwnd = FindWindowEx(hw

读取其他软件listview控件的内容

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Runtime.InteropServices

c#版的WinExecAndWait32,执行一个程序,等待他运行完毕,并回显他的显示

需要定义部分和执行部分,定义部分基本上是从delphi改过来的,把他另存命名为dWindows.cs,代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; // using System.Runtime.InteropServices; namespace 应用服务器 { //转载请注明海宏软件,从0开始,测试了好几天的.在delphi基础上改过来的. /// <su

C# window Service实现调用有UI的应用程序(关于win xp以后的window系统)

用服务去打开一个UI程序,是不可能的,服务后台的进程所使用的用户是system,这个用户是不需要UI的,因此也就限制了打开有UI线程的应用.因此,你要打开一个UI线程,必须使用一个管理员权限的账号去打开程序,默认一个程序去打开另一个程序,后一个程序其使用的win账号是前一个程序的win账号. 我开发的系统中有一接口程序(这里就称Task,是一个C#的Console Application)经常无故的死掉,导致第二天的数据不能正常解析,所以,我写了一个window service去监视Task,如

通过WinAPI播放PCM声音

在Windows平台上,播放PCM声音使用的API通常有如下两种. waveOut and waveIn:传统的音频MMEAPI,也是使用的最多的 xAudio2:C++/COM API,主要针对游戏开发,是DirectSound的基础 在Windows Vista以后,推出了更加强大的WASAPI ,并用WASAPI封装了MME以及DirectSound API. 对于前面的两个API,在.net平台下有如下封装: NAudio Sharpdx WSAPI可能由于更加复杂,没有什么比较完善的封

c/c++指针总结[pointer summary]

[本文链接] http://www.cnblogs.com/hellogiser/p/pointer-summary.html 1.指针注意事项 (1). 指针类型字符串不容许修改 char *str1="abcd"; char str2[]="abcd";的区别.指针类型的字符串一般不允许修改,如:str1[0]='c':这样的语句会导致运行时错误. C++ Code 123456789101112131415   void test_string() {