You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenEdge环境加载自定义PCControl DLL时出现「Unknown table name PCControl. (200)」错误的技术求助

OpenEdge加载自定义DLL提示“Unknown table name PCControl. (200)”的排查与解决

针对你遇到的这个问题,我先梳理下核心矛盾:你的PCControl.dll代码本身没问题(放到同事的DLL里能正常运行),但自己单独部署时,OpenEdge却把它当成不存在的表来报错——这说明OpenEdge根本没把它识别成.NET程序集,而是误判成了数据库表。结合你的配置细节,我整理了几个针对性的排查步骤:

一、先检查ProAsmRef生成的代理类是否有效

当你用ProAsmRef处理PCControl.dll时,它会生成对应的OpenEdge代理.p文件,这个文件是OpenEdge和.NET交互的桥梁。你需要确认:

  • 代理文件已经成功生成,并且没有报错。运行ProAsmRef时注意看控制台输出,如果有依赖缺失或者生成失败的提示,那就是根源。
  • 生成的代理.p文件已经被编译成.r文件,并且这个.r文件所在的路径在PROPATH中。如果代理类没编译,或者路径不对,OpenEdge找不到对应的类定义,就会报错“未知表名”。
  • 打开代理文件看看,里面应该有NAMESPACE PCControl和CLASS PCC的定义,以及AzureLogin方法的声明。如果这些内容缺失,说明代理生成失败了。

二、核对assemblies.xml的配置细节

你的assemblies.xml里已经加了PCControl的条目,但有几个细节容易出错:

  • 确认name属性里的版本号、PublicKeyToken和你的PCControl.dll完全匹配。可以用.NET的sn -T PCControl.dll工具查看公钥令牌,或者在Visual Studio的项目属性里检查程序集版本,确保和配置里的1.0.0.0、PublicKeyToken=null一致。
  • 检查assemblies.xml的存放位置:OpenEdge会从启动目录、PROPATH路径里查找这个文件。你可以把它复制到login.p所在的目录,或者OpenEdge的bin目录,避免路径读取问题。
  • 另外,System.DirectoryServices.dll的版本也要确认——你配置的是4.0.0.0,要和你C#项目中引用的版本一致,否则会导致依赖加载失败。

三、检查DLL的部署路径和依赖项

OpenEdge加载.NET程序集时,会遵循.NET的程序集加载规则,除了PROPATH,还要注意:

  • 把PCControl.dll放到OpenEdge的bin目录(比如C:\Progress\OpenEdge\bin)试试,系统级路径的加载优先级更高,能避开PROPATH的潜在问题。
  • 确认PCControl.dll的依赖项都能被找到:你用到了System.DirectoryServices和Microsoft.Office.Interop.Outlook,前者要确保版本匹配且路径正确,后者如果是通过NuGet引用的,要确认Interop DLL是否在同一目录,或者已经注册到GAC。

四、修正OpenEdge代码中的USING和调用方式

你提到用了USING PCControl.*,但要注意这个语句的作用域:

  • USING必须放在代码的最顶部,在任何PROCEDURE或者DEFINE语句之前,否则作用域不生效。比如正确的写法应该是:
USING PCControl.*.

&ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE Login C-Win
PROCEDURE Login :
DEF VAR lSuccess AS CHAR NO-UNDO.
-- 这里直接用类名即可,不需要加命名空间
lSuccess = PCC:AzureLogin("arorap1", "12345").
MESSAGE lSuccess VIEW-AS ALERT-BOX INFO TITLE "ok".
END PROCEDURE.
&ANALYZE-RESUME
  • 如果还是有问题,尝试用完整的命名空间调用,避开USING的影响:lSuccess = PCControl.PCC:AzureLogin("arorap1", "12345")。

五、排查ProAsmRef的执行日志

运行ProAsmRef.exe时,控制台会输出详细日志,你可以仔细看看有没有关于PCControl.dll的错误信息——比如“无法加载依赖项”“生成代理类失败”之类的提示,这些日志能直接定位问题。如果有错误,修复后重新生成代理和配置文件。

既然把函数放到同事的DLL里能正常运行,说明你的C#逻辑完全没问题,问题肯定出在PCControl.dll的代理生成、配置或者部署环节。按照上面的步骤逐一排查,应该能快速解决这个200错误。

内容的提问来源于stack exchange,提问作者Raphael Frei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 15:32:39