关注“Teamcenter笔记”,发送“工业软件群“加入工软大家庭!商务合作请回复“二维码“!
目前,Teamcenter ITK 提供的构建工具主要是一些脚本文件,例如 compile.bat 和 link_custom_exit.bat。但这些脚本文件无法利用 Visual Studio 2019 IDE 提供的强大功能,例如 调试器 (Debugger)、符号浏览 (Symbol browsing) 和 项目管理。
本文将介绍如何配置 Visual Studio 2019 来构建 ITK 自定义 Exit DLL 的 Debug 与 Release 版本,并使用 Visual Studio 调试器对其进行调试。
前提条件
已安装 Teamcenter。
已安装Visual Studio 2019,支持编译 64 位二进制文件。
创建 Visual Studio 项目
启动 Visual Studio IDE,创建一个 空项目 (Empty Project),命名为
itk_gtac_exits。
在 解决方案资源管理器 (Solution Explorer) 中,右键点击 Source Files,选择 添加新项 (Ctrl+Shift+A),新建一个文件itk_gtac_exits.c,保存到 itk_gtac_exitsitk_gtac_exits文件夹下。


将以下源码添加到 itk_gtac_exits.c 文件中:
extern DLLAPI int register_userservices(int *decision, va_list list);extern DLLAPI int itk_gtac_exits_register_callbacks(){printf("itk_gtac_exits_register_callbacksn");CUSTOM_register_exit("itk_gtac_exits", /* 共享库名 */"USERSERVICE_register_methods", /* user_exit 名称 */(CUSTOM_EXIT_ftn_t)register_userservices /* 回调函数 */);return ITK_ok;}
同样,在 Source Files 下新建一个文件 item_create_post.cpp,放到 itk_gtac_exitsitk_gtac_exits文件夹下。
添加如下代码:
extern "C" DLLAPI int ItemCreatePost(METHOD_message_t* msg, va_list args){const char* item_id = va_arg(args , const char *);const char* item_name = va_arg(args , const char *);const char* type_name = va_arg(args , const char*);const char* rev_id = va_arg(args , const char*);tag_t* new_item = va_arg(args , tag_t*);tag_t* new_rev = va_arg(args , tag_t*);tag_t item_master_form = va_arg(args , tag_t);tag_t item_rev_master_form = va_arg(args , tag_t);printf("ItemId: %s, ItemName: %s, TypeName: %s, RevId: %s", item_id, item_name, type_name, rev_id);return ITK_ok;}extern "C" DLLAPI int register_userservices(int *decision, va_list args){int ec = ITK_ok;METHOD_id_t method;*decision = ALL_CUSTOMIZATIONS;ec = METHOD_find_method("Item", ITEM_create_msg, &method);if(ec)printf("Error %d - METHOD_find_methodn", ec);if(method.id != NULLTAG){ec = METHOD_add_action(method, METHOD_post_action_type,(METHOD_function_t)ItemCreatePost, NULL);if(ec != ITK_ok)printf("tMETHOD_add_action error: %d!n", ec);elseprintf("METHOD_add_action successful!n");}elseprintf("Method NOT found!n");return ec;}
至此,我们已经有一个基础的 ITK 工程。接下来需要配置项目属性,确保能够正确编译和链接。
配置项目属性 (Property Sheets)
Visual Studio 使用 属性表 (Property Sheets) 来管理编译器和链接器的设置。
新建一个文本文件,将以下 XML 内容保存为
itk_general_exits.props(路径:itk_gtac_exitsitk_gtac_exits):
<?xml version="1.0" encoding="utf-8"?>
<ProjectToolsVersion="4.0"xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroupLabel="PropertySheets" />
<PropertyGroupLabel="UserMacros" />
<PropertyGroup />
<ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>
STEP;AP203;AP214;WIN32_LEAN_AND_MEAN;WNT;_CRT_SECURE_NO_DEPRECATE;
_CRT_NONSTDC_NO_DEPRECATE;_SECURE_SCL=0;_HAS_TR1=0;_WIN32;WIN32;_WIN64;
_INTEL=1;CRTAPI1=_cdecl;CRTAPI2=cdecl;IMAN_TAO;BYPASS_FLEX;POMDLL;IPLIB=none;
%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<AdditionalIncludeDirectories> D:Tc13.2tc_rootinclude;D:Tc13.2tc_rootinclude_cpp;
%(AdditionalIncludeDirectories)
</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<AdditionalDependencies>
delayimp.lib;libict.lib;libsyss.lib;libpom.lib;libae.lib;libappr.lib;
...(省略部分,保持原文完整)
xerces322_X_19.lib;%(AdditionalDependencies)
</AdditionalDependencies>
</Link>
<Link>
<DelayLoadDLLs>
libict.dll;libae.dll;libappr.dll;libarchive.dll;...
</DelayLoadDLLs>
<AdditionalLibraryDirectories>
D:Tc13.2tc_rootlib;%(AdditionalLibraryDirectories)
</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemGroup />
</Project>注意事项:
确保 不要换行(每一行完整写在一行)。
确保 库文件之间的空格 保留。
修改
AdditionalIncludeDirectories和AdditionalLibraryDirectories为你的环境路径。
构建与调试
打开 Property Manager,在
Debug|x64和Release|x64节点下,添加itk_general_exits.props。
在项目属性页 →
Configuration Properties→General→Configuration Type,设置为 Dynamic Library (.dll)。
设置 Debug 配置时,Runtime Library 选项选择
/MD,避免链接警告。
保存配置,按 F7 编译生成 DLL。
配置 Teamcenter 以加载自定义 Exit DLL
在
tc_profilevars.bat中添加环境变量:
set TC_USER_LIB=D:devitk_gtac_exitsx64debug
在 Teamcenter 中配置
TC_customization_librariespreference,加入自定义 DLL。
重启 RAC 客户端与 TAO 窗口。
新建 Item 以测试,日志输出将显示在 TAO 窗口。
使用 Visual Studio 调试 ITK Exit DLL
Teamcenter 启动时会运行 tcserver.exe 进程,该进程会加载 DLL。调试方法如下:
在源码中设置断点(F9),如:

在 Visual Studio 中使用 Attach to Process (Ctrl+Alt+P),附加到 tcserver.exe。

启动 RAC 登录后,DLL 会被加载,断点会激活。


使用 F10 单步调试,F5 继续运行。
当新建 Item 时,会触发 ItemCreatePost 断点,进入调试流程。


总结
通过上述步骤,我们实现了:
在 Visual Studio 2019 中创建并构建 Teamcenter 13 ITK 自定义 Exit DLL。
使用属性表管理编译与链接配置。
配置 Teamcenter 环境以加载 DLL。
借助 Visual Studio 调试器调试 DLL 注册与运行逻辑。

下方添加熊老师微信






