首页/新闻资讯/正文详情

Creo二次开发实战:C++与C#混合编程架构与避坑指南

发布时间:2026/9/28 1:52:10 来源:云帆数科 栏目:资讯中心
Creo二次开发实战:C++与C#混合编程架构与避坑指南
做Creo二次开发的朋友迟早会撞上一个坎官方Pro/TOOLKIT接口是C/C的世界可企业内部工具却越来越倾向于用C#写界面、写业务逻辑。两边各有各的舒服区偏偏得在同一个工具里共处。我这些年接手的Creo小工具、自动化插件、参数化设计辅助程序到后面几乎都跑成了C与C#混合编程的形态。中间栽过的跟头不算少今天把思路、代码和踩过的坑一次性梳理清楚给正准备上车的你省点时间。这篇文章解决的问题很具体用什么架构把C的TOOLKIT调用和C#的界面层捏在一起、VS和Creo版本怎么配、C侧导出函数怎么写才不会被C#调崩、字符串和回调怎么安全传递以及编译好之后运行期那些让人头大的DLL加载失败和崩溃问题。适合三种人看准备从零开始做Creo工具开发的C#程序员、被TOOLKIT文档劝退的C工程师以及要给团队选型确认技术路线的老手。1. 为什么需要C与C#混合编程以及三种主流方案怎么选1.1 为什么是C与C#混合编程Creo二次开发的核心接口是Pro/TOOLKIT一套纯C接口的API库覆盖模型检索、特征操作、参数读写、装配遍历、工程图导出、几何查询几乎全部底层能力。这套接口数量庞大、结构体满天飞、回调函数签名单长又怪直接用C#做P/Invoke声明不是不行但工作量会失控。更实际的问题是TOOLKIT文档里的示例清一色C/C你拿C#去硬套查资料都费劲。反过来看C虽然能直接驱动TOOLKIT但做图形界面、数据库对接、报表导出、与PLM/ERP系统集成这些业务层需求时开发效率被C#甩开太多。C写个像样的WinForms或WPF界面那酸爽谁写谁知道。所以现实的解法就是C只干它最擅长的事——封装TOOLKIT调用C#干它最擅长的事——写界面、写业务、对接外部系统。两者之间用一套尽量薄的接口衔接。这种分工不是谁拍脑袋想出来的而是被项目逼出来的。我见过一个团队用纯C写Creo参数化设计工具建模逻辑跑得飞快但后续加报表、加权限、加数据库同步每次改动都要重新编译、重新测DLL迭代速度肉眼可见地慢。换成C#做业务和UI、C只做TOOLKIT桥接之后需求变更基本都落在C#侧改动成本低了一个数量级。1.2 三种混合方案的对比与选型C与C#混合编程在Creo场景下主流方案大致有三条路各有利弊选错一条后面要多填不少坑。方案A是独立进程加进程间通信。C写一个标准的TOOLKIT同步模式DLL通过protk.dat注册进Creo负责在Creo进程内部执行建模和参数读写C#写一个独立的WinForms或WPF程序负责交互和数据管理两边通过命名管道、共享内存、WM_COPYDATA或者干脆定时读写文件来通信。这个方案隔离性好C#程序挂了不影响Creo本体适合做团队级的大型工具。方案B是C导出原生DLLC#通过P/Invoke直接调用。C写一个普通DLL内部以TOOLKIT的异步模式调用Creo API对外导出一批C风格的函数C#项目用DllImport声明这些函数像调用本地函数一样使用。这个方案调用链最短、类型转换最可控、调试也相对直观是我个人在中小型工具里用得最多的路数。方案C是C/CLI中间层。建立一个C/CLI类库项目在托管和非托管代码之间做桥梁C#项目直接引用这个程序集无需手写P/Invoke。从代码整洁度上说这是最舒服的问题在于Creo TOOLKIT的头文件和MFC依赖跟/clr编译开关冲突非常严重稍微复杂一点的调用就会出现奇怪的编译错误和运行期崩溃版本一升级就碎一地。我给这三种方案做了个快选表方案开发效率运行稳定性调试难度适合场景A. 独立进程IPC中高较高团队级工具、多模块长期维护B. 原生DLLP/Invoke高高中中小型工具、快速交付C. C/CLI中间层最高较低高小型工具、快速验证原型我自己的选择倾向是除非团队里有对C/CLI非常熟的老人否则别碰方案C项目小、要快速出活闭眼选B项目大、要长期演进且模块边界清晰上A。剩下的内容我按方案B展开因为这套路数踩坑最少、能写的干货最多。1.3 明确我们的目标示例后面要演示的完整代码我定一个非常典型的场景开发一个C#工具连接到正在运行的Creo会话读取当前激活模型的名称和质量属性展示在WinForms界面上再支持按路径打开一个零件模型。这个场景麻雀虽小五脏俱全——连接Creo、调用TOOLKIT接口、字符串传参、数值传参、模型类型转换全都覆盖到了。你把这个骨架跑通后面扩展参数批量读写、特征遍历、工程图导出都是往里面填代码的事。2. 环境准备与工程配置先把环境这关熬过去2.1 Creo版本、VS版本与编译器兼容性Creo TOOLKIT对编译器版本有明确的对应表PTC官方会在安装目录的文档里标注当前这个Creo版本支持哪个版本的Visual Studio。这个对应关系不是“差不多就行”编译器版本不对头文件里的某些宏定义、库文件的符号修饰规则对不上编译期和链接期能折腾得你想骂人。以我手头的经验Creo 6.0到8.0这个区间常见搭配是VS2015或VS2017Creo 9.0以后VS2019和VS2022逐渐成为主流选择。具体到你自己装的Creo最靠谱的办法是去Creo安装目录下找到TOOLKIT相关的pdf或readme文档搜索“Supported Compilers”或“Supported Platforms”照着表去装VS。C#侧对VS版本就没那么挑剔但有个关键约束.NET的位数必须跟Creo保持一致。现在的Creo基本都是64位所以C#工程的目标平台必须显式设为x64。这个我后面单独展开因为它真的坑很多人。环境变量方面建议给Creo的安装路径配一个系统级环境变量比如CREO_HOME指向Creo的根目录。路径里尽量不要有中文和空格虽说现在工具链对空格的处理比早年好多了但混合编程涉及include路径、lib路径、protk.dat注册路径每一处都要解析路径字符串少给自己找麻烦。2.2 C DLL工程关键配置新建一个空的C DLL工程把TOOLKIT的include目录和lib目录配进去。include目录一般在Creo安装目录下的Common Files版本号文件夹里面的protoolkit\includeslib目录在protoolkit的某个平台子目录下里面能找到toolkit.lib这类库文件。不同Creo版本的目录结构略有差异以你本地实际Path为准。工程属性里要确认几个关键项字符集设置为“使用多字节字符集”TOOLKIT的老API大量使用char*用Unicode字符集会让你在多字节和宽字节之间来回转换徒增工作量。C语言标准按TOOLKIT文档要求来不建议开太新的标准有些老宏在老标准下行为更安全。预处理定义里按PTC文档要求加上必要的宏比如PRO_USE_VAR_ARGS这类和TOOLKIT可变参数相关的宏不加在某些版本上编译直接报错。链接器的输入里除了toolkit的主库视需要加上异步模式相关的库运行库建议选多线程静态库或按PTC文档要求选择静态链接能在目标机器上少依赖VC运行库DLL。还有一个很多人忽略的环节导出函数必须用extern C和__declspec(dllexport)修饰。C有名字修饰机制编译出的导出符号会被改得面目全非C#侧DllImport按函数名查找会直接找不到入口点。2.3 C#工程引用方式与平台目标C#工程不需要引用C的.lib或.h文件只用DllImport声明就行了。但平台目标必须显式选x64选AnyCPU是灾难——如果你的程序跑在64位系统上AnyCPU默认会以64位进程运行看起来没问题但内部若有任何间接依赖落到32位路径上就是BadImageFormatException反过来如果你不小心把C侧编成了32位那更是直接崩。我的习惯是C工程和C#工程的平台都锁死在x64不给自己留任何侥幸空间。DLL拷贝策略上可以在C#工程的生成事件里加一个post-build命令把C侧生成的DLL复制到C#的输出目录省得每次手动拷贝。3. 核心代码实现C导出接口 C#调用实战3.1 C侧导出函数怎么写才能被C#安全调用C侧写导出函数第一条原则是所有对外函数包裹在extern C块里禁止C名字修饰。第二条原则是不要让异常跨过DLL边界。C#调用原生DLL时如果C函数内部抛出未捕获的异常程序通常会直接崩溃而不是抛出可捕获的.NET异常。稳妥的做法是每个导出函数内部用try/catch把异常吞掉返回一个错误码。第三条原则是字符串参数要特别当心。TOOLKIT的ProName是定长字符数组C#侧传StringBuilder时一定要给足缓冲区容量太小了C侧往里写会内存越界运气好是乱码运气不好直接访问违例。下面是一个C导出函数的最小骨架注释已经把关键点标出来了// CreoBridge.h #pragma once #ifdef __cplusplus extern C { #endif // 连接当前正在运行的Creo会话 __declspec(dllexport) int CreoConnect(); // 获取当前激活模型的名称写入buffer __declspec(dllexport) int CreoGetActiveModelName(char* buffer, int bufferSize); // 获取当前激活模型的质量单位与Creo单位设置一致 __declspec(dllexport) int CreoGetActiveModelMass(double* mass); // 按路径打开零件模型modelPath为ANSI字符串 __declspec(dllexport) int CreoOpenModel(const char* modelPath); #ifdef __cplusplus } #endif对应的C实现文件里我把TOOLKIT调用集中在几个静态函数里导出函数只做参数校验和异常封装。连接Creo的部分我单独拎出来说明不同Creo版本异步模式的连接API有差异老版本可能是启动Creo进程的方式新版本则提供连接已运行会话的接口具体函数名要以你安装的TOOLKIT文档为准。下面代码里的CreoConnect只写了基本流程你把实际API套进去就行。// CreoBridge.cpp #include CreoBridge.h #include cstring #include ProToolkit.h #include ProMdl.h #include ProSolid.h #include ProMassProperty.h static bool g_connected false; // 注意这里以TOOLKIT异步模式为例 // 新版本Creo通常用类似 ProToolkitConnectTo 的API连接已打开的会话 // 老版本可能需要先启动Creo进程请按PTC文档替换连接逻辑 int CreoConnect() { if (g_connected) return 1; // 伪代码示例替换为当前Creo版本对应的连接API // ProError err ProToolkitConnectTo(0, NULL, NULL, ProToolkitVersionLatest, NULL, 0); // if (err PRO_TK_NO_ERROR) g_connected true; // 为了演示这里直接置为已连接 g_connected true; return g_connected ? 1 : 0; } int CreoGetActiveModelName(char* buffer, int bufferSize) { if (buffer NULL || bufferSize 0) return 0; // 防止异常跨DLL边界 try { ProMdl mdl NULL; // 获取当前激活的模型句柄 if (ProMdlCurrentGet(mdl) ! PRO_TK_NO_ERROR) return 0; ProName name; std::memset(name, 0, sizeof(name)); // 获取模型名称 if (ProMdlNameGet(mdl, name) ! PRO_TK_NO_ERROR) return 0; // 拷贝到输出缓冲区留出终结符空间 std::strncpy(buffer, name, bufferSize - 1); buffer[bufferSize - 1] \0; return 1; } catch (...) { return 0; } } int CreoGetActiveModelMass(double* mass) { if (mass NULL) return 0; try { ProMdl mdl NULL; if (ProMdlCurrentGet(mdl) ! PRO_TK_NO_ERROR) return 0; ProSolid solid NULL; // 将通用模型句柄转为实体句柄 if (ProMdlToSolid(mdl, solid) ! PRO_TK_NO_ERROR) return 0; ProMassProperty prop; std::memset(prop, 0, sizeof(prop)); // 计算质量属性 if (ProSolidMassPropertyGet(solid, prop) ! PRO_TK_NO_ERROR) return 0; *mass prop.mass; return 1; } catch (...) { return 0; } } int CreoOpenModel(const char* modelPath) { if (modelPath NULL) return 0; try { ProMdl mdl NULL; // 检索模型这里按零件模型处理 ProError err ProMdlRetrieve((ProCharName)modelPath, PRO_MDL_PART, mdl); if (err ! PRO_TK_NO_ERROR) return 0; // 在Creo界面中显示模型 ProMdlDisplay(mdl); return 1; } catch (...) { return 0; } }3.2 C#侧P/Invoke声明与参数类型对照C#侧声明P/Invoke函数时有几个容易出错的点。第一CallingConvention必须跟C侧一致我上面导出函数没写调用约定默认就是Cdecl所以C#侧也要显式指定CallingConvention.Cdecl。第二字符串类型要按实际情况选择函数参数是const char*时C#用string并配上CharSet.Ansi函数参数是输出缓冲区时C#用StringBuilder。第三double这种值类型作为输出参数时C#侧要写ref double并在调用前先声明变量。下面是完整的C#封装类using System; using System.Runtime.InteropServices; using System.Text; namespace CreoTools { public static class CreoBridge { private const string DllName CreoBridge.dll; [DllImport(DllName, CallingConvention CallingConvention.Cdecl)] public static extern int CreoConnect(); [DllImport(DllName, CallingConvention CallingConvention.Cdecl, CharSet CharSet.Ansi)] public static extern int CreoGetActiveModelName(StringBuilder buffer, int bufferSize); [DllImport(DllName, CallingConvention CallingConvention.Cdecl)] public static extern int CreoGetActiveModelMass(ref double mass); [DllImport(DllName, CallingConvention CallingConvention.Cdecl, CharSet CharSet.Ansi)] public static extern int CreoOpenModel(string modelPath); } }调用侧示例var name new StringBuilder(256); double mass 0; if (CreoBridge.CreoConnect() 1) { if (CreoBridge.CreoGetActiveModelName(name, name.Capacity) 1) { Console.WriteLine(当前模型 name.ToString()); } if (CreoBridge.CreoGetActiveModelMass(ref mass) 1) { Console.WriteLine(模型质量 mass.ToString(F3)); } }这里有个非常容易踩的细节StringBuilder的容量决定了C侧能写多少字符我给256。ProName的尺寸在不同Creo版本里不完全一样但256对模型名称来说绝对够用。你要是贪省给32遇到长文件名或者路径信息C侧一旦越界写入就是隐性的内存破坏不一定会立刻崩但后面可能出现各种诡异行为。3.3 一个能跑通的完整示例获取当前模型名称与质量把上面的代码串起来就是一个完整的最小可运行程序。工程结构就三个部分C的CreoBridge项目生成CreoBridge.dllC#的CreoTools项目负责界面和调用一个post-build事件把DLL复制到C#输出目录。我在C#项目里做了一个非常简单的WinForms窗口放一个“刷新信息”按钮点击后调用CreoBridge读模型名称和质量显示在TextBox里。这一步跑通了你就可以确认三件事C DLL被正确加载了、TOOLKIT API调用没有崩溃、C#到C的参数传递没有出乱子。这是后续一切复杂功能的地基。如果你在点击按钮后什么都没发生先不要怀疑TOOLKIT函数写错了。第一步先验证DLL有没有被加载、函数有没有被找到——在C的每个导出函数入口写一行OutputDebugString或写一个日志文件是最笨也最有效的定位手段。我见过太多人花一晚上查TOOLKIT API细节最后发现是DLL根本没进到调用进程里。3.4 回调通知机制的跨语言实现思路前面示例都是C#主动调C但实际项目里经常需要反向通知——Creo里的模型变了、某个特征被改了、零件被切换了C侧得告诉C#界面去刷新。跨语言回调的实现要点是C侧定义一个函数指针类型作为回调接口C#侧用委托匹配这个签名通过Marshal.GetFunctionPointerForDelegate转换成函数指针传给C。C侧简化示例typedef void (*ModelChangedCallback)(const char* modelName); __declspec(dllexport) void CreoSetModelChangedCallback(ModelChangedCallback callback) { g_callback callback; // 之后在Creo事件触发处调用 g_callback(name); }C#侧声明[UnmanagedFunctionPointer(CallingConvention.Cdecl, CharSet CharSet.Ansi)] public delegate void ModelChangedCallback(string modelName); [DllImport(CreoBridge.dll, CallingConvention CallingConvention.Cdecl)] public static extern void CreoSetModelChangedCallback(ModelChangedCallback callback);这个玩法里最大的坑是委托被垃圾回收。C#的委托默认是托管对象会被GC随时回收一旦C侧保存了函数指针而C#侧不要再持有这个委托GC把它回收后再回调就是访问非法内存程序直接崩。解决方法是把委托对象保存在一个静态字段里保证它和Creo会话同生命周期C#侧private static ModelChangedCallback _callback; public static void RegisterCallback() { _callback (modelName) Console.WriteLine(模型变化 modelName); CreoSetModelChangedCallback(_callback); }另一个思路是C#侧起一个定时器每隔几百毫秒调C侧查一次状态。这种方式代码简单、不容易崩代价是实时性差一点、CPU占用高一点。对大多数参数化设计工具来说轮询几百毫秒一次完全能接受我反而建议优先用轮询回调拿到手上再逐步完善别一上来就整花活。4. 常见坑位编译、运行与调试问题排查实录4.1 编译期头文件找不到、链接符号解析不了头文件找不到基本是include目录配置问题。确认你的include路径指向了Creo安装目录下真正的protoolkit\includes而不是某个备份目录或错误的版本目录。装多个Creo版本的朋友特别容易在这里翻车——VS工程里写死的路径指向了旧版Creo的头文件新版TOOLKIT接口有了变化编译报一堆莫名其妙的错误。链接期出现“无法解析的外部符号”先检查lib目录是否配错、toolkit.lib是不是真的被链接进来了。另一个常见原因是C#侧调用时使用了错误的调用约定或者错误的大小写。Windows的DLL导出符号对大小写是敏感的C#的DllImport默认按函数名精确查找C侧只要用了extern C导出函数名大小写必须完全一致。如果编译时还报了宏相关的错去查PTC文档里要求的预处理定义加上PRO_USE_VAR_ARGS这类宏再试。TOOLKIT对VC编译器和宏定义的要求比较死少一个宏就可能触发头文件里的条件编译分支报错方式千奇百怪。4.2 运行期DLL加载失败、BadImageFormatExceptionDLL加载失败的分两类。第一类是运行时提示“找不到指定的模块”错误码可能是0x8007007E。这个99%是依赖缺失——CreoBridge.dll依赖了VC运行库或MFC库但目标机器上没有对应版本。解法是装对应版本的Visual C Redistributable或者在C工程里改成静态链接运行库让依赖打进DLL内部。另一个常见依赖源是TOOLKIT库本身CreoBridge.dll在C#程序独立运行时找不到Creo安装目录下的某些DLL这种就得把Creo的bin目录加到PATH环境变量里。第二类是”BadImageFormatException“这个基本是位数不匹配。C侧编了x64但C#工程是x86或者反过来。检查三个地方C工程的Active solution platform、C#工程的Platform target、目标机器上的.NET运行环境位数。这是我见过最多的运行期错误没有之一。定位DLL依赖问题我推荐用Dependencies这个工具打开CreoBridge.dll就能看到所有依赖项和哪些缺失。直接看缺失的DLL名字再去对应装运行库效率比瞎猜高得多。4.3 数据交互字符串乱码、结构体对齐、委托被回收字符串乱码通常源于字符集不一致。C侧用多字节字符集C#侧CharSet设为Ansi在简体中文系统上大多数情况是正常的。但如果Creo模型名里带有中文且乱码了就需要检查Creo内部是否按UTF-8存储名称。TOOLKIT在不同版本里的编码处理不完全一致一种土办法是C侧把ProName转成宽字符wchar_tC#侧用Unicode对应的声明接中间再加一层转换。这个方案稍微麻烦但能根治编码问题。结构体传参是另一个重灾区。TOOLKIT的ProMassProperty、ProMatrix等结构体字段排列和对齐规则跟C#的默认内存布局并不总是一致。C#侧声明结构体时一定要加[StructLayout(LayoutKind.Sequential)]字段类型和顺序必须跟C头文件完全对应。如果结构体里面有联合体、位域那就要逐个核对实在不行就不要直接传结构体改成传IntPtr在C侧再解引用。委托被回收的问题我在3.4节已经提过这里再多说一句回调跨语言边界时不只是委托被回收会崩回调函数里如果抛了托管异常也会直接干掉进程。回调函数体里一定要用try/catch包住所有逻辑绝不抛异常。4.4 调试技巧用日志和附加进程定位混合调用中的问题C#调C的问题调试起来最大的难点是“不知道崩在哪一边”。一个很管用的手段C侧每个导出函数入口和出口都写一行日志日志用fopen/fprintf写到固定路径或者用OutputDebugString输出到VS输出窗口。我习惯在C侧写一个极简的Log函数所有导出函数进出一行再在关键TOOLKIT调用前后各插一行带错误码的日志。这样C#侧调用返回后打开日志文件就能看出是DLL没进、TOOLKIT调用失败还是返回值处理出了问题。如果Creo进程本身崩溃了就需要附加到Creo进程调试。用VS打开C工程调试菜单里选择“附加到进程”目标选正在运行的Creo进程调试引擎勾选“本机代码”。附加之后再把C#程序跑起来调用DLL崩的时候VS能停在C代码的崩溃点上。这里有个小门槛附加到Creo需要管理员权限VS必须以管理员身份启动。工具整体跑通了最后还要注意部署环节。C侧的运行库、Creo的二进制依赖路径、protk.dat的注册位置每一步都可能让“本地能跑、换台机器就挂”。我习惯写一个部署检查脚本把DLL依赖、路径、环境变量一次性校验完省得到客户现场手忙脚乱。4.5 避坑清单速查表把上面这些经验浓缩成一张速查表贴在我工位边上那种分类问题现象排查方向解决办法编译头文件找不到include路径配置指向当前Creo版本的实际protoolkit\includes编译链接符号无法解析lib路径/库文件配好toolkit.lib确认extern C导出编译宏相关报错预处理定义缺失按PTC文档补上PRO_USE_VAR_ARGS等宏运行找不到模块0x8007007EDLL依赖缺失装VC运行库或静态链接补Creo bin到PATH运行BadImageFormatException位数不匹配C和C#工程都锁x64运行中文乱码字符集不一致C#用Ansi必要时C侧转宽字符运行回调崩溃委托被GC回收用静态字段持有委托对象回调内try/catch调试不知道崩在哪侧缺少日志C侧每个函数出入口写日志写在最后的个人体会做Creo二次开发这几年我最大的感受是混合编程本身不复杂复杂的是两边对彼此的运行机制不了解时的互相甩锅。C工程师觉得C#程序员连函数指针都没搞明白C#工程师觉得C那套头文件和链接库就是上个世纪的糟粕。实际上两边只要守住各自的边界——C侧只导出稳定的C风格接口、不跨边界抛异常C#侧严格匹配调用约定和字符集、管理好委托生命周期——这个架构就能跑得很稳。最后分享一个小技巧C导出接口的版本号一定要留好。接口变更时C#侧通过GetProcAddress按版本号加载不同名称的导出函数老版本DLL继续可用新版本无缝升级。这个设计在团队工具迭代时救过我很多次强烈建议从第一个版本就开始做。

相关推荐

网站建设软件定制开发报价多少钱
网站建设软件定制开发报价多少钱

不懂代码做定制站?5年运维告诉你建站报价到底怎么算 自己不会代码,却想要一个独一无二、能跑业务的网站,这时候你心里最打鼓的就是【建站报价】。很多老板或者运营小伙伴,一搜“网站建设软件定制开发”,看到的报价从三千到三十万不等,跨度大到让人怀疑… · 2026/9/28 1:52:10

树莓派连热点秒查IP:三层过滤精准定位SSH地址
树莓派连热点秒查IP:三层过滤精准定位SSH地址

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/28 1:52:10

RISC-V在AI时代的真实处境:从ISA扩展到LLVM后端适配的工程实践
RISC-V在AI时代的真实处境:从ISA扩展到LLVM后端适配的工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/28 1:52:09

Spingboot启动预热的实现
Spingboot启动预热的实现

启动预热的适用场景启动预热适合以下情况:数据主要来自第三方接口,无法直接从本地数据库读取。第三方接口响应较慢,首次访问容易超时。一个页面需要调用多个第三方接口或逐项查询。数据读取频繁,但变化不频繁。希望服务启动后&… · 2026/9/28 3:40:12

Understanding Driving Risks using Large Language Models: Toward Elderly Driver Assessment
Understanding Driving Risks using Large Language Models: Toward Elderly Driver Assessment

文章主要内容总结 本文研究了多模态大语言模型(具体为ChatGPT-4o)利用静态行车记录仪图像进行类人交通场景解读的潜力,重点聚焦与老年司机评估相关的三项任务:交通密度评估、交叉口可见性评估和停车标志识别。这些任务需上下文推理而非简单目标检测。研究采用零样本、少样… · 2026/9/28 3:32:43

Leveraging Large Language Models for Classifying App Users‘ Feedback
Leveraging Large Language Models for Classifying App Users‘ Feedback

文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)解决应用用户反馈分类的挑战,传统方法依赖有监督机器学习,但受限于标注数据集的规模和质量。研究通过三个核心实验评估了4种先进LLMs(GPT-3.5-Turbo、GPT-4o、Flan-T5、Llama3-70b)的性能: LLMs在用户反馈分类中的基… · 2026/9/28 3:32:43

Using Large Language Models for Legal Decision-Making in Austrian Value-Added Tax Law: An Experim...
Using Large Language Models for Legal Decision-Making in Austrian Value-Added Tax Law: An Experim...

文章主要内容总结 本文通过实验评估了大型语言模型(LLMs)在奥地利及欧盟增值税(VAT)法框架下辅助法律决策的能力。研究聚焦于两种提升LLM性能的方法——微调(fine-tuning)和检索增强生成(RAG),并在两类案例中进行验证:一是权威教科书案例,二是税务咨询公司的真实案… · 2026/9/28 3:32:43

学Java别走弯路,这5个方向最吃香
学Java别走弯路,这5个方向最吃香

学Java的人很多,但学明白的人不多。有人学了半年还在写控制台程序,有人一年就能独当一面。差别不在天赋,而在方向。Java生态太庞大了,什么都学等于什么都没学。选对方向,事半功倍。今天盘点当前最吃香的5个Java方向&am… · 2026/9/28 3:32:15

AlphaAgents: Large Language Model based Multi-Agents for Equity Portfolio Constructions
AlphaAgents: Large Language Model based Multi-Agents for Equity Portfolio Constructions

AlphaAgents相关总结与翻译 一、文章主要内容总结 (一)研究背景与问题 传统股票投资组合管理依赖人类分析师处理海量信息(如财务披露、财报、市场新闻等),存在信息处理效率低、易受认知偏差(如损失厌恶、过度自信)影响的问题,可能错失投资收益机会。尽管AI在数据处理… · 2026/9/28 3:32:08

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

制作网页比较方便的软件怎么选?一文搞懂避坑指南
制作网页比较方便的软件怎么选?一文搞懂避坑指南

制作网页比较方便的软件怎么选?一文搞懂避坑指南 很多老板一上来就问:做个网站多少钱?但我反问他:你的域名买了吗?服务器租了吗?他一脸懵。这就是典型的“域名服务器搞不懂”。别急,今天咱们不聊虚的,直接 一文搞懂 那些让你头秃的技术名词。… · 2026/9/28 0:00:06

婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量
婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量

婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量 找婚恋网站建站公司,最怕的就是被坑高价。很多同行跟我吐槽,报价单上写得模棱两可,功能栏里全是“高级定制”、“专属UI”,结果落地全是套壳。今天不聊虚的,直接甩几个我经手的 实战案例… · 2026/9/28 0:00:19

济南做网站多少钱:3个案例拆解,防黑源码下载全攻略
济南做网站多少钱:3个案例拆解,防黑源码下载全攻略

济南做网站多少钱:3个案例拆解,防黑源码下载全攻略 上周济南一个做建材的老板找我,脸都绿了。他的官网首页弹出了赌博广告,后台被植入了挖矿脚本。他慌得问我:“网站被黑挂马不知道怎么办?能不能直接找之前的外包公司要源码下载,看看哪里被动了手脚?… · 2026/9/28 0:00:25

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码