Mil学习之Mapp

Mil学习之Mapp一 什么是 Mapp 以 Mapp 为前缀的函数构成了应用程序模块

大家好,欢迎来到IT知识分享网。

一、什么是Mapp

以Mapp为前缀的函数构成了应用程序模块。应用程序模块允许您初始化和控制MIL应用程序的执行环境。除其他外,该模块还提供集成调试服务、用于基准测试的高性能计时器、可移植线程和事件处理,以及用于处理和内存操作的自动系统资源补偿。

二、Mapp常用功能

Mil学习之Mapp

1. 初始化Mil环境

每个Mil程序开始的第一步。

  • 使用 MappAlloc 和 MappFree

C++写法1。

MIL_ID MilApplication = M_NULL; MappAlloc(M_NULL, M_DEFAULT, &MilApplication); ... MappFree(MilApplication);

C++写法2,可以注意到新版Mil中的写法2是不需要释放的,这是新版Mil的特性,不过我没测试过。

MIL_UNIQUE_APP_ID MilApplication = MappAlloc(M_NULL, M_DEFAULT, M_UNIQUE_ID);

C#写法

MIL_ID MilApplication = MIL.M_NULL; MIL.MappAlloc(MIL.M_NULL, MIL.M_DEFAULT, ref MilApplication); ... MIL.MappFree(MilApplication);
  • 使用 MappAllocDefault 和 MappAllocDefault

这样写的方便之处是可以一次性初始化多个对象,包括app、sys、disp等等,需要注意这里的默认设置是和 MilConfig 里面是对应的

Mil学习之Mapp

C++。

MIL_ID MilApplication, MilSystem, MilDisplay; MappAllocDefault(M_DEFAULT, &MilApplication, &MilSystem, M_NULL,M_NULL, M_NULL); ... MappFreeDefault(MilApplication, MilSystem, M_NULL, M_NULL, M_NULL);

C# 写法套路同上。

2. 计时

统计功能,Mil的计时可以使用该函数,也可以使用Mil自己的调试工具,调试工具的使用在后面会介绍。

C++。

MIL_DOUBLE Time = 0.0; MappTimer(M_DEFAULT, M_TIMER_RESET+M_SYNCHRONOUS, M_NULL); ... MappTimer(M_DEFAULT, M_TIMER_READ+M_SYNCHRONOUS, &Time); 

3. 异常处理

通常来说是用不到这个的。。。

打开和关闭 Mil 异常提示

MappControl(M_DEFAULT, M_ERROR, M_PRINT_DISABLE); ... MappControl(M_DEFAULT, M_ERROR, M_PRINT_ENABLE); 

使用 try…catch捕获 Mil 异常,注意这个只在C# 开发环境下有效

MIL.MappControl(MilApp, MIL.M_ERROR, MIL.M_THROW_EXCEPTION); try { // 如果这里的Mil函数执行报错,会在 catch 中捕获到 } catch (MILException exception) { Console.WriteLine("System Allocation Error : {0}", exception.Message); MessageBox.Show(exception.Message, "System Allocation Error", MessageBoxButton.OK, MessageBoxImage.Error); } 

4. 回调

处理Mil报错时会使用到。

C++.

MappHookFunction(M_DEFAULT, M_ERROR_CURRENT,HookFunction,this); ... MappHookFunction(M_DEFAULT, M_ERROR_CURRENT+M_UNHOOK,HookFunction,this); MIL_INT MFTYPE HookFunction(MIL_INT HookType, MIL_ID EventId, void* UserDataPtr) { MIL_TEXT_CHAR ErrorMessage[M_ERROR_MESSAGE_SIZE] = MIL_TEXT(""); MappGetHookInfo(M_DEFAULT, EventId,M_MESSAGE+M_CURRENT_FCT,ErrorMessage); return M_NULL; }

C#

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using System.Runtime.InteropServices; using Matrox.MatroxImagingLibrary; namespace ConsoleApplication1 { class Program { struct UserDataStruct { double dVal; } public static MIL_APP_HOOK_FUNCTION_PTR HookFunctionDelegate = new MIL_APP_HOOK_FUNCTION_PTR(HookFunction); static void Main(string[] args) { MIL_ID milapp = 0, milsys = 0, mildisp = 0; MIL.MappAllocDefault(MIL.M_DEFAULT, ref milapp, ref milsys, ref mildisp, MIL.M_NULL, MIL.M_NULL); UserDataStruct userData = new UserDataStruct(); GCHandle hData = GCHandle.Alloc(userData); IntPtr ptrData = GCHandle.ToIntPtr(hData); MIL.MappHookFunction(MIL.M_DEFAULT, MIL.M_ERROR_CURRENT, HookFunctionDelegate, ptrData); // ... MIL.MappHookFunction(MIL.M_DEFAULT, MIL.M_ERROR_CURRENT + MIL.M_UNHOOK, HookFunctionDelegate, ptrData); MIL.MappFreeDefault(milapp, milsys, mildisp, MIL.M_NULL, MIL.M_NULL); } private static MIL_INT HookFunction(MIL_INT HookType, MIL_ID EventId, IntPtr UserDataPtr) { StringBuilder strBuild = new StringBuilder(); MIL.MappGetHookInfo(MIL.M_DEFAULT, EventId, MIL.M_MESSAGE + MIL.M_CURRENT_FCT, strBuild); // ... return 0; } } } 

5. 查询 Inquire

顾名思义,查询Mapp所有的属性设置,使用很简单,详细使用参加Mil帮助文档吧~

6. 文件操作

        1) 查看一个文件夹下有多少指定类型文件,以及获取文件名,文件名长度

// 获取文件夹下文件个数 MIL_STRING FileToSearch = MIL_TEXT("D\\SubFoder\\*.bmp"); MIL_INT NumberOfFiles = 0; MappFileOperation(MilApplication, FileToSearch, M_NULL, M_NULL, M_FILE_NAME_FIND_COUNT, M_DEFAULT, &NumberOfFiles); for(int i=0; i<NumberOfFiles ; i++) { // 获取文件名的长度,含最后'\0' MIL_INT FilenameStrSize = 0; MappFileOperation(MilApplication, FileToSearch, M_NULL, M_NULL, M_FILE_NAME_FIND + M_STRING_SIZE, i, &FilenameStrSize); // 获取文件名 1 std::vector<MIL_TEXT_CHAR> vFilename; vFilename.resize(FilenameStrSize); MappFileOperation(MilApplication, FileToSearch, M_NULL, M_NULL, M_FILE_NAME_FIND, i, &vFilename[0]); // 获取文件名 2 MIL_STRING FileName = MIL_TEXT(""); MappFileOperation(MilApplication, FileToSearch, M_NULL, M_NULL, M_FILE_NAME_FIND, i, FileName); }

       

// 获取文件夹下文件个数 MIL_INT NumberOfFiles = 0; String FileToSearch = @"D:\壁纸\*.jpg"; MIL.MappFileOperation(MilApp, FileToSearch, MIL.M_NULL, MIL.M_NULL, MIL.M_FILE_NAME_FIND_COUNT, MIL.M_DEFAULT, ref NumberOfFiles); for (int i = 0; i < NumberOfFiles; i++) { MIL_INT FilenameStrSize = 0;// 获取文件名的长度,含最后'\0' MIL.MappFileOperation(MilApp, FileToSearch, MIL.M_NULL, MIL.M_NULL, MIL.M_FILE_NAME_FIND + MIL.M_STRING_SIZE, i, ref FilenameStrSize); FilenameStrSize--; // 去掉末尾\0 String sName = ""; Char[] cName = new Char[FilenameStrSize]; IntPtr ptr = Marshal.StringToHGlobalAnsi(sName); MIL.MappFileOperation(MilApp, FileToSearch, MIL.M_NULL, MIL.M_NULL, MIL.M_FILE_NAME_FIND, i, ptr); Marshal.Copy(ptr, cName, 0, (int)FilenameStrSize); sName = new String(cName); }

2) 文件夹的创建和删除

MIL_INT FileExists; MappFileOperation(M_DEFAULT, ExampleDataPath, M_NULL, M_NULL, M_FILE_EXISTS, M_DEFAULT, &FileExists); // 文件夹是否存在 FileExists = M_YES MappFileOperation(M_DEFAULT, ExampleDataPath, M_NULL, M_NULL, M_FILE_MAKE_DIR, M_DEFAULT, M_NULL); // 创建文件夹 MappFileOperation(M_DEFAULT, ExampleDataPath, M_NULL, M_NULL, M_FILE_DELETE_DIR, M_DEFAULT, M_NULL); // 如果文件夹不为空,则删除文件夹 MappFileOperation(M_DEFAULT, ExampleDataPath, M_NULL, M_NULL, M_FILE_DELETE_DIR, M_RECURSIVE, M_NULL); // 无论文件夹是否为空,删除文件夹及文件夹内所有东西

        3) 文件操作

MIL_INT FileExists = 0; MappFileOperation(M_DEFAULT, MIL_TEXT("D:\\SubFoder\\1.bmp"), M_NULL, M_NULL, M_FILE_EXISTS, M_DEFAULT, &FileExists); // 是否存在 FileExists = M_YES MappFileOperation(M_DEFAULT, MIL_TEXT("D:\\SubFoder\\1.bmp"), M_NULL, M_NULL, M_FILE_DELETE, M_DEFAULT, M_NULL); // 删除 MappFileOperation(M_DEFAULT, SrcFileName, M_DEFAULT, DetFileName, M_FILE_COPY, M_DEFAULT, M_NULL); // 文件复制,复制后文件可以和原文件不同名 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/132701.html

(0)
上一篇 2025-07-29 16:26
下一篇 2025-07-29 16:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信