opti2
- 格式:ppt
- 大小:221.00 KB
- 文档页数:18


如何使⽤PCL2安装Minecraft以及导⼊Mod与光影【我的世界】如何使⽤PCL2 联机我的世界PCL2已推出⾃带联机功能,有兴趣的朋友可以试试。
客户端联机教程⾸先下载Beta 1.5.3或其它版本压缩包并解压运⾏Beta 1.5.3.exe,如果提⽰没有java环境,请先退出安装jdk-8u281-windows-x64或其它版本java安装forge-1.16.5-36.0.0-installer.jar (mod安装基础) 安装路径是安装PCL 2 的.minecraft⽂件夹!安装OptiFine_1.16.5_HD_U_G6.jar (光影安装基础,可跳过) 安装路径是安装PCL 2 的.minecraft⽂件夹!在PCL 2 选择-->下载-->⾃动安装-->在右侧选择版本例如1.16.5-->点击下⾯的forge-->选择版本下载在PCL 2 选择-->下载-->⼿动安装包-->Forge-->下载版本,例如1.16.5,下载速度可能有点慢,但⽂件不⼤下载完毕后,回到PCL 2 主页-->选择版本-->选择1.16.5-forge-->版本设置--MOD管理-->打开Mod⽂件夹,导⼊mod回到PCL 2 主页-->选择版本-->选择1.16.5-forge-->进⼊游戏选择多⼈游戏,点击直接连接,输⼊朋友的服务器地址想开启光影,请点击设置-->视频设置-->光影-->*打开光影⽂件夹,放⼊光影包,例如BeyondBeliefLegacy_V1.2.0.zip,在光影设置⾥选中它服务端教程如果你想在你的电脑上开启服务器,让⼩伙伴们玩耍,可以往下阅读PS:作为服务端你的电脑需要⼀定配置,且保证⽹络稳定下载mc服务端请注意下载的版本,如果你和朋友们决定玩的版本1.16.5,那⼀般1.16的服务器都可以兼容解压服务端,打开server.properties配置⽂件,修改配置,例如设置不检验盗版,如果你对⾥⾯的配置名⼀头雾⽔,可以安装MCSManager,它集成了配置⽂件的管理点击forge.jar或minecraft_server.jar启动服务器,会出来⼀个简陋的窗⼝,有⼀个命令⾏输⼊,可以在这⾥输⼊指令上属步骤完成了服务器的开启,如果你和朋友在同⼀局域⽹,直接点击多⼈游戏就可以看到你的服务器注意你在本机想玩,也得开启客户端进⾏联机映射公⽹如果你会映射,请⽆视下⾯,把默认的25565端⼝映射出去即可下载SakuraLauncher客户端创建隧道,左边选择TCP 0.0.0.0 25565 java右边选择压缩数据,选择⼀个服务器,创建隧道即可在⽇志⾥找到TCP 类型隧道启动成功使⽤ [cn-*******:******] 来连接到你的隧道或使⽤ IP 地址连接(不推荐):[4**.2**.1**.2**::******]]把⾥⾯的⽹址发给你的朋友即可使⽤MCSManager进⾏服务端管理解压MCSManager,阅读使⽤前必读.txt打开运⾏.bat(这个界⾯不能关闭)打开⽹址http://127.0.0.1:23333/,默认账号是 #master 密码 123456点击服务端管理-->创建新实例应⽤,按照⽂字教程来上传⽂件的时候,上传服务端的forge.jar或minecraft_server.jar,然后打开MCSManager_8.6.17_Win64\server\server_core,进⼊你创建的实例名⽂件夹打开这个⽂件夹,并把你的服务端全部⽂件复制到这⾥回到管理页⾯,运⾏这个实例,即可进⾏管理操作。
汽车cae技术及optistruct工程实践随着科技的不断发展,计算机辅助工程(Computer Aided Engineering,简称CAE)技术在汽车行业的应用越来越广泛。
CAE技术可以帮助工程师在设计阶段预测和优化汽车的性能、安全性和可靠性,从而降低研发成本,缩短研发周期。
其中,Optistruct是一款功能强大的结构优化软件,广泛应用于汽车行业的CAE 分析中。
本文将介绍汽车CAE技术的发展概况,以及Optistruct在汽车工程实践中的应用。
一、汽车CAE技术的发展概况汽车CAE技术起源于20世纪50年代,随着计算机技术的发展而逐渐成熟。
从最初的简单应力分析到现在的多物理场模拟和结构优化,汽车CAE技术经历了不断地发展和创新。
近年来,随着计算机硬件和软件的飞速进步,汽车CAE 技术得到了更加广泛的应用。
1. 多物理场模拟多物理场模拟是指在同一模型中考虑多个物理现象的过程。
在汽车工程中,多物理场模拟可以帮助工程师更好地理解汽车在各种工况下的性能。
例如,在进行汽车碰撞安全性能分析时,需要考虑结构动力学、热力学和流体动力学等多个物理现象。
通过多物理场模拟,工程师可以更加精确地预测汽车的碰撞性能,从而优化汽车的结构设计。
2. 结构优化结构优化是指在满足性能要求的前提下,通过调整结构的形状、尺寸和材料分布,使结构的重量轻或成本低。
在汽车工程中,结构优化可以显著降低汽车的重量,提高燃油经济性,同时还可以提高汽车的耐用性和安全性。
传统的结构优化方法通常需要大量的试验和迭代,而CAE技术可以通过计算机模拟快速找到优解,大大提高了优化效率。
二、Optistruct在汽车工程实践中的应用Optistruct是一款功能强大的结构优化软件,广泛应用于汽车行业的CAE分析中。
Optistruct具有丰富的计算功能和快捷的求解器,可以处理线性和非线性结构分析、结构优化和拓扑优化等多种问题。
1. 结构分析和优化Optistruct可以用于分析汽车的刚度、强度和稳定性等性能。
vericut⼆次开发VERICUT Development ToolsOptiPath APIIntroductionOptiPath API is designed to enable an interface between VERICUT and customized plug-in toolpath optimization programs. OptiPath API is only available on Windows platform. When a system environment variable "CGTECH_OPAPI" is defined with a user's optimization library name, VERICUT will automatically run OptiPath in API mode and connect to user's program. VERICUT's own OptiPath function will no longer be available.NOTE: The files (opapi.lib, opapi_template.c, optiapi.h and optimport.h) referred to below, are all located the\windows\optipath_api\ folder of your VERICUT software installation.How to build a plug-in libraryThe plug-in format used by VERICUT is a "WIN32 Dynamic Linked Library" which can be built using MSVC. The following files/libraries are needed:opapi.h, optimport.h, opapi.lib, opapi.dlland a sample C file called "opapi_template.c"The easiest way to build such a plug-in dll , for example, "opapi_usr.dll", is to start with creating a C/C++ file, like"opapi_usr.c", with the skeleton code found in"opapi_template.c".There is one setup function must be present with exactly the declaration style and name provided below:void opapi_setup(void);where optimization callback functions must be registered inside this setup function. The following functions can be used to register these callbacks in setup:void opapi_set_initialize_function(OPAPI_InitializeFunction);void opapi_set_optimize_function(OPAPI_OptimizeFunction);void opapi_set_terminate_function(OPAPI_TerminateFunction);void opapi_set_tool_change_setup_function(OPAI_ToolSetupFunction);void opapi_set_user_data(void *);In addition, there are 25 optional utility functions that provide the user program with detailed process data. All the functions are described in the Function Definition section at the end of this document. Examples can be found in "opapi_template.c". char *opapi_get_variable_value(char *);double opapi_get_axial_depth(void);double opapi_get_program_feedrate(void);double opapi_get_spindle_speed(void);double opapi_get_total_distance(void);double opapi_get_total_time(void);double opapi_get_total_volume_removed(void);double opapi_get_volume_removed(void);int opapi_get_conventional_cut_flag(void);int opapi_get_side_cut_flag(void);int opapi_get_thin_cut_flag(void);int opapi_get_turning_contact_profile(int*, int**, sOPAPI_PROFILE **);void opapi_free(char *);void opapi_get_contact_area(int *, double *);void opapi_get_current_tool(char **, int *, sOPAPI_APT_CUTTER *);void opapi_get_cut_machine_position(double[12], double[12]);void opapi_get_cut_tool_position(double[6], double[6]);void opapi_get_decompressed_map_data(sOPAPI_MAP, int *, char **);void opapi_get_grid_map(sOPAPI_MAP *);void opapi_get_motion_type(eOPAPI_MOTION_TYPE *, double[6]);void opapi_get_radial_width(void);void opapi_get_toolpath_record(int *, char **);void opapi_send_message(char *, int);void opapi_set_override_rpm(double);void opapi_set_resolution(double);void opapi_write_out_comment_line(char *);Include "opapi.h" and "optimport.h" in "opapi_usr.c". Compile and link all the usr files with "opapi.lib". This will generate a ".dll" library.Set system environment variable "CGTECH_OPAPI" set to where this dll is , for example, "c:\opapi\opapi_usr.dll" and place "opapi.dll" in the same directory where "CGTech.dll" is. OptiPath API mode is now ready to go.Function DefinitionsSetup Functionsvoid opapi_setup(void)Setup function. Must be present with exactly the same declaration style and name. Called when OptiPath API library is first loaded. It is to register user's optimization function. The following functions can be and should only be called in this setup function:opapi_set_initialize_function(OPAPI_InitializeFunction);opapi_set_optimize_function(OPAPI_OptimizeFunction);opapi_set_terminate_function(OPAPI_TerminateFunction);opapi_set_tool_change_setup_function(OPAI_ToolSetupFunction);opapi_set_user_data(void *);void opapi_set_initialize_function(OPAPI_InitializeFunction func_p) Register user's initialization function with VERICUT. The initialization function registered, func_p, should have the following declaration style:typedef int (*OPAPI_InitializeFunction)(void *userData);which returns 1 if initialization is successful or 0 if initialization failed. If failed, OptiPath will be turned off. This function should only be called in opapi_setup() function. Once registered, the initialization function, func_p, will be called each time the user turn OptiPath on.void opapi_set_optimize_function(OPAPI_OptimizeFunction func_p) Register user's optimization function with VERICUT. The optimization function registered, func_p, should have the following declaration style:typedef void (*OPAPI_OptimizeFunction)(void *userData);This function should only be called in opapi_setup() function. Once registered, the optimization function, func_p, will be called in a frequency defined by user (seeopapi_set_resolution(double)) during cutting process.void opapi_set_terminate_function(OPAPI_TerminateFunction func_p) Register user's terminate function with VERICUT. The termination function registered, func_p, should have the following declaration style:typedef void (*OPAPI_TerminateFunction)(void *userData);This function should only be called in opapi_setup() function. Once registered, the termination function, func_p, will be called each time OptiPath is turned off.void opapi_set_tool_change_setup_function(OPAPI_ToolSetupFunction func_p)Register user's tool change setup function with VERICUT. The tool change function registered, func_p, should have the following declaration style:typedef int (*OPAPI_ToolSetupFunction)(void *userData);which returns 1 if tool setup is successful or 0 if tool setup failed. If failed, no optimization will occur for the current tool. Therefore, if a tool does not need to be optimized, just return 0 when func_p is called for this tool. This function should only be called in opapi_setup() function. Once registered, the tool setup function, func_p, will be called each time a tool change occurs.void opapi_set_user_data(void *usr_data)Set user data that needs to be passed among optimization functionsOPAPI_InitializeFunction, OPAPI_ToolSetupFunction, OPAPI_OptimizeFunction, OPAPI_TerminateFunction. This function should only be called in opapi_setup() function.Utility Functionschar opapi_get_variable_value(char * variable_name) Return a variable value. Only valid for G-code toolpath files. Parameters:variable_name: Input, name of the variable.Return the address of variable value depending the variable type.If variable is a number, return the address of the double value (double *). If variable is a text, return the address of the string (char *)double opapi_get_axial_depth(void)Return maximum axial depth.double opapi_get_program_feedrate(void)Return programmed feedrate.double opapi_get_radial_width(void)Return maximum radial width.double opapi_get_spindle_speed(void)Return spindle speed in rpm.double opapi_get_total_distance(void)Return total distance.double opapi_get_total_time(void)Return total time.double opapi_get_total_volume_removed(void)Return total volume of material being removed.double opapi_get_volume_removed(void)Return the volume of material being removed by the current motion.int opapi_get_conventional_cut_flag(void)Return conventional cut flag.int opapi_get_side_cut_flag(void)Return side cut flag.int opapi_get_thin_cut_flag(void)Return thin cut flag.int opapi_get_turning_contact_profile(int*, int**, sOPAPI_PROFILE **)Get 2D tool and stock contact profile for turning operation. A 2D profile is represented by an array of 2D profile element (sOPAPI_PROFILE). Each 2D profile element is the position of either an arc center or a point. Function returns total number of profile elements in all loops of the contact profile.Parameters:num_loops: Output, number of closed loops in contact profile.size: Output, an array of number of profile elements for each closed loop, needs to be freed by calling routine.profile: Output, an array of all profile elements of contact profile, needs to be freed by calling routine.typedef enum e_OPAPI_MOTION_TYPE{OPAPI_LINEAR = 0,OPAPI_CIRCLE = 1,OPAPI_NURBS = 2,OPAPI_RAPID= 3,}eOPAPI_MOTION_TYPE;typedef struct s_OPAPI_CUTTER{double cutterDiameter;/* Cutter diameter, D */double cutterHeight;/* Cutter height, H */double cornerRadius; /* Corner radius, R */double eDistance;/* Distance from tool centerline to corner radius center, E */double fDistance;/* Distance from tool tip to corner radius center, F */double baseAngle;/* Base angle, A */double sideAngle;/* Side angle, B */} sOPAPI_CUTTER;typedef struct s_OPAPI_MAP{double toolEnd[2]; /* Tool tip at starting position projected to the projection grids, in gridAxisX, gridAxisY */double gridOrigin[3]; /* Origin of projection grids in X, Y, Z */double gridAxisX[3];/* Projection grids' X axis in I, J, K. X axis in normal to the Z axis and tool axis in starting position */ double gridAxisY[3]; /* Projection grids' Y axis in I, J, K */double gridAxisZ[3]; /* Projection grids' Z axis in I, J, K. Z axis is the unit vector of cutter translation position vector */ double gridSize; /* Length of each grid */int numGridsX;/* Number of grids along gridAxisX */int numGridsY;/* Number of grids along gridAxisY */int maskSize; /* Number of int/32 bits that are used to store the mask */int *gridMask; /* Pointer to grid mask */} sOPAPI_MAP;typedef struct s_OPAPI_PROFILE{double pt[2]; /* x, y values for a point or an arc centerdouble rad; /* arc radius with sign: negative radius means arc direction is clock wise, positive radius means arc direction is counter clock wise, 0 radius means it's a point not an arc.}sOPAPI_PROFILE;void opapi_free(char *data)Free memory.Parameters:data : Input, memory pointer.void opapi_get_contact_area(int *contact, double *area)Get the area that tool is in contact with materialParameters:contact : Output, 1 if tool is in contact with material, 0 if not.area : Output, area of material that is in contact with the tool.void opapi_get_current_tool(char **tool_id, int *is_apt,OPAPI_APT_CUTTER *apt_cutter)Get the current tool information. This function can be called inOPAPI_ToolSetupFunction, to retrieve information about the current loaded tool. Parameters:tool_id : Output, tool id of current tool as defined in tool library. Will be null if an apt tool is defined by cutter statement.is_apt : Output, 1 if an apt cutter, 0 if not.apt_cutter : Output, cutter definition stored in sOPAPI_CUTTER if current tool is an apt cutter.void opapi_get_cut_machine_position(double start[12], double end[12]) Get machine positions at the starting and ending points of current motion.Parameters:start : Output, machine starting position in (X, Y, Z, U, V, W, A, B, C, A2, B2, C2)end : Output, machine ending position in (X, Y, Z, U, V, W, A, B, C, A2, B2, C2)void opapi_get_cut_tool_position(double start[6], double end[6])Get tool positions at the starting and ending points of current motion. The start/end positions are relative to the "stock" component's coordinate system.Parameters:start : Output, tool starting position, defined by tool tip position [0-2] in (X, Y, Z) and tool axis vector [3-5] in (I, J, K).end : Output, tool ending position, defined by tool tip position [0-2] in (X, Y, Z) and tool axis vector [3-5] in (I, J, K).void opapi_get_decompressed_map_data(sOPAPI_MAP *map, int*size, char **values)Transform immersion data to the form of an array of integers, decompressed by gridMask. Each array element has a value of 0 or 1. For example, values[numX] = 0 means on the [numX]th grid (row = 1, column = 0), the cutter has no contact with material.Parameters:map : Input, a map structure that contains grid mask data.size : Output, size of the unsigned array.values : Output, pointer to the bit array. Must be freed by using opapi_free(char *).void opapi_get_grid_map(sOPAPI_MAP * map)Get detailed tool-material immersion data.Parameters:map: Output, returned map->gridMask field must be freed by using opapi_free(char *). VERICUT provides kinematics of cutter immersion data in the form of a grid map, amapping of what parts of the workpiece are in contact with the cuter and stores it in the sOPAPI_MAP structure. The grid map is a projection plane (gridAxisX & gridAxisY) that is normal to cutter transition vector (gridAxisZ). Each grid has a bit value of 1 or 0, with 1 meaning the projected part on the workpiece is in contact with the cutter and 0 meaning no contact. All the grid bits are stored row by row, starting from bottom to top, left to right, into (a) 32-bits integer(s).void opapi_get_motion_type(eOPAPI_MOTION_TYPE *type, double circle[6])Get current motion type.Parameters:type : Output, motion type defined in eOPAPI_MOTION_TYPEcircle : Output, circle defined by circle center [0-2] in (X, Y, Z) and circle normal [3-5] in (I, J, K) for circular motion.void opapi_get_toolpath_record(int *rec_num, char **record)Get the current toolpath record.Parameters:rec_num : Output, current record number(line number) in toolpath file.record : Output, current toolpath record being processed.void opapi_send_message(char *message, int display)Send a message to VERICUT.Parameters:message : Input, message to be sentdisplay : Input, 0 written to log file; 1 displayed in logger; 2 display in logger and written to log file.void opapi_set_override_rpm(double rpm)Set override spindle speed in rpm. This function should only be called inOPAPI_ToolSetupFunction, which sets up a new spindle speed for the tool just loaded.Parameters:rpm : Input, spindle speed in rpm.void opapi_set_resolution(double distance)Set optimization resolution distance. Optimization resolution distance controls the frequency or "sampling distance" used to analyze each tool path motion. Each feed rate controlled motion is partitioned into samples and OPAPI_OptimizeFunction is called based on this distance. Distance is measured along the tool motion. This function should only be called in the OPAPI_InitializeFunction.If the user program does not set up a resolution by calling this function in initialization, a default resolution distance based on the size of the cutting tool relative to the displayed model is calculated by VERICUT. This choice is recommended when little or no knowledge of cutting methods or feed rates is available.Parameters:distance : Input, optimization distance.void opapi_write_out_comment_line(char *comments)Write out a comment line in the optimized toolpath file. Only valid in G-code toolpath file.Parameters:comments : Input, comment line to write out. Must be a complete line, including starting comment character and end of line return character.CME-APIIntroductionCME-API is the replacement for VERICUT Machine Developers Kit (DevKit). DevKit consisted of a licensed compiler and documentation on how to create and compile CGTech Macro Language (CML) programs. CML programs enabled the user to extend VERICUT's control emulation with custom NC macros that emulate unique behavior of the customer's machine. The CML program has access to specific "exported" functions within VERICUT. The compiler produced a CGTech Macro Executable (CME) file containing a compiled form of the CML program. The CME was then used by VERICUT's control file to add customer-created NC macros to the control emulation. The DevKit functionality is replaced by a new method for creating custom NC macros: the C Macro Extension – Application Programming Interface, or CME–API.Using CME-API, you can write a standard C, or C++, program which calls "exported" functions in VERICUT (the exact same "exported" functions that were available to a DevKit CML program). He then compiles this program using Microsoft's Visual Studio 6.0 C++ compiler, into a standard Windows Dynamic Link Library (DLL). The DLL is loaded by VERICUT at runtime, extending VERICUT's control emulation with custom NC macros (exactly the same as a DevKit-created CME).CME-API replacement has several advantages over DevKit:CME-API uses an industry-standard language: C or C++CME-API gives the developer access to all the full, rich features of C and C++ CME-API enables the developer to use standard C, and C++, debugging tools ?CME-API runs much faster than a CME fileThe CME-API functionality is available with a base Verification license, not as an optional module. Any VERICUT user has access to it, but it does require using Microsoft Visual Studio 6.0 C++. CME-API is available only on Windows. There are no plans to port it to UNIX.CME-API DocumentationThis document is intended to describe using "exported" VERICUT functions in a C program, compiling a CME-API DLL in Microsoft Visual Studio, and how to use the DLL in a VERICUT simulation. It will also contain a document on how to convert a CML program to C.This documentation is written for use by a software developer with a working knowledge of the C programming language and Microsoft Visual Studio. It is not intended to document the C programming language, nor how to use Microsoft's development environment. There are many fine books available on both these topics in libraries and book stores. There are also many college and university courses on the C and C++ programming languages.CME-API DeliverableThe CME-API deliverable consists of an example C source file ( example1.c ), a library ( ( CGTech.lib ) , and header files ( cmeapi_defines.h, cmeapi_import.h, andcmeapi_types.h ) that provide access to available "exported" functions These files can all be found in the \windows\cmeapi\ directory of your VERICUT installation.Migration from DevKit to CME-APIFormer DevKit users must modify their existing CML programs in order to create a new CME-API compatible DLL. They will have to convert their CML programs to C, and compile them using Microsoft's Visual Studio 6.0 C++ compiler. Fortunately the old CML language syntax is very similar to C. All the VERICUT functions used by CME-API are exactly the same as those that were available to CML. End-users of CME-API must be an experienced C, or C++, programmer with sufficient knowledge of the C language syntax and the Microsoft Visual Studio development environment.Convert a CMS file to C using the CME-APIThis section describes the steps that are required to convert an existing DevKit CMS file to a C file that can be used with CME-API.1.Change "text" to "char *", or "char [ ]".2.Change "number" to "double"3.Change functions starting with "cfunc_" to start with "cmeapi_".4.Change function declarations to ANSI C declarations.5.Move locals variables inside the function.6.Change "AXIS" to "CMEAPI_AXIS".7.Change prefix "RP2_" to "CMEAPI_ ". For example, RP2_POINT should bechanged to CMEAPI_POINT.8.Change expressions, i.e. from lt to <.9.Change string expressions to use C string functions10.Add "CMEAPI_" in front of some previous #defines/doc/4523ca86bb68a98270fefa69.html e the function cmeapi_register_macro( ) to define macros in VERICUTinstead of the name beginning with "cms_".12.Define a function called cmeapi_init( )./* ************************************************************************** */#define DllExport _declspec(dllexport)/* ************************************************************************** */ DllExport void cmeapi_init(void){printf("cmeapi_init() Success!\n");cmeapi_register_macro("UserCheckSpindle", cms_UserCheckSpindle);}Build a DLL in Visual Studio Express C++This section describes how to build a DLL in Visual Studio Express C++.To build a DLL in Visual C++:Start a New Workspace/Project for an Empty DLLAdd WIN_NT to the C/C++ preprocessor definitionsAdd CGTech.lib to Link library modulesAdd the C source code and header file, compile, & linkThe following are the steps to required to configure Visual Studio Express C++ to work with the VERICUT CME-API, and to build the example included with VERICUT./doc/4523ca86bb68a98270fefa69.html unch Visual Studio Express > New > ProjectGeneral > Empty ProjectGive the project a name – (e.g. vericut_cme)Store project on local drive – (e.g. c:\vericut_cme)2.Locate the Tree on the leftRight Click on the Top Level [vericut_cme] > Add > Existing ItemNavigate to your VERICUT directory - (e.g. c:\cgtech612\windows\cmeapi) Highlight all files > Click Add3.Locate the Tree on the leftRight Click on the Top Level [vericut_cme] > PropertiesConfiguration Properties > General > Configuration Type > [Dynamic Library (.dll)]C/C++ > Preprocessor > Preprocessor Definitions > [WIN_NT]Linker > General > Additional Library Directories[c:\cgtech612\windows\cmeapi]Linker > Input > Additional Dependencies > CGTech.lib4.Click OK to save properties5.Top Menu > Build > Build SolutionResults should be [Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped]/doc/4523ca86bb68a98270fefa69.html unch VERICUTTop Menu > Configuration > Adv. Options > Dev Kit CME [tab] > Browse to where the vericut_cme.dll was outputted (e.g. c:\vericut_cme\vericut_cme\debug\ vericut_cme.dll) > Click OK.7.To confirm the DLL is being loaded, modify your vericut.bat file before launchingVERICUT.Change "%CGTECH_JRE%\bin\javaw" to "%CGTECH_JRE%\bin\java"(remove the "w") so that the dialog window stays open.If the DLL is loaded successfully, you should see "cmeapi_init() Success!"Registering FunctionsSuppose you defined a function char *modify_input_str(char *) in C. The CME-API does not know about it until you notify the CME-API by "registering" it. The function does not have to be named modify_input_str, it can be named anything that you want, but it does have to have a "char *" as the input argument and a "char *" as the return argument.If the function name is char *modify_input_str(char *) then add the following call in cmeapi_init():cmeapi_register_modify_input_str(modify_input_str);The following functions are provided to enable you to "register" three types of functions:void cmeapi_register_start_init(vvFunc fptr);Use the function void cmeapi_register_start_init(vvFunc fptr) to register your own function that is called at the start of initialization which has no input arguments and does not return anything: void fptr(void);void cmeapi_register_modify_input_str(ccFunc fptr);Use the function void cmeapi_register_modify_input_str(ccFunc fptr) to register your own function to modify the input string which has one one string input argument and returns the modified string: char *fptr(char *);void cmeapi_register_modify_output_str(ccFunc fptr);Use the function void cmeapi_register_modify_output_str(ccFunc fptr) to register your own function to modify the output string which has one string input argument and returns the modified string: char *fptr(char *);。