没有感觉到能写些对其他人有帮助的东西
罗云彬的 windows32位汇编那本书敲代码敲到第9章了,也是第3遍看了,估计也是再看最后一两遍了,等都抄一遍之后在看看有些什么值得写的吧以前用的一个东西,能让没用过的人省些时间吧
#region /* * 共享内存类 */ const int INVALID_HANDLE_VALUE = -1; const int PAGE_READWRITE = 0x04; //共享内存 [DllImport("Kernel32.dll", EntryPoint = "CreateFileMapping")] private static extern IntPtr CreateFileMapping(IntPtr hFile, //HANDLE hFile, UInt32 lpAttributes,//LPSECURITY_ATTRIBUTES lpAttributes, //0 UInt32 flProtect,//DWORD flProtect UInt32 dwMaximumSizeHigh,//DWORD dwMaximumSizeHigh, UInt32 dwMaximumSizeLow,//DWORD dwMaximumSizeLow, string lpName//LPCTSTR lpName ); [DllImport("Kernel32.dll", EntryPoint = "OpenFileMapping")] private static extern IntPtr OpenFileMapping( UInt32 dwDesiredAccess,//DWORD dwDesiredAccess, int bInheritHandle,//BOOL bInheritHandle, string lpName//LPCTSTR lpName ); const int FILE_MAP_ALL_ACCESS = 0x0002; const int FILE_MAP_WRITE = 0x0002; [DllImport("Kernel32.dll", EntryPoint = "MapViewOfFile")] private static extern IntPtr MapViewOfFile( IntPtr hFileMappingObject,//HANDLE hFileMappingObject, UInt32 dwDesiredAccess,//DWORD dwDesiredAccess UInt32 dwFileOffsetHight,//DWORD dwFileOffsetHigh, UInt32 dwFileOffsetLow,//DWORD dwFileOffsetLow, UInt32 dwNumberOfBytesToMap//SIZE_T dwNumberOfBytesToMap ); [DllImport("Kernel32.dll", EntryPoint = "UnmapViewOfFile")] private static extern int UnmapViewOfFile(IntPtr lpBaseAddress); [DllImport("Kernel32.dll", EntryPoint = "CloseHandle")] private static extern int CloseHandle(IntPtr hObject); /* * 共享内存类 */ #endregion
c#调用windowsAPI时,方法和c++那种取得GetProcAddress的方式差不多,都是取得位置,再把参数对齐就可以调用了。
[DllImport("所在dll",EntryPoint = "函数名")]
后面写个参数种类相同,返回值种类相同的模型就知道这个函数了
当返回一个指针时这样处理,主要是Marshal.PtrToStringAnsi 。详细地可以查MSDN
IntPtr lpAddr = MapViewOfFile(hMap, 0x0004, 0, 0, 0xff);
string str_MapValue = Marshal.PtrToStringAnsi(lpAddr);
比较无聊的,用点时间都可以查出来,希望能给需要的人节约点时间吧