【问题标题】:Use Custom DLLs into Progress使用自定义 DLL 进行处理
【发布时间】:2022-12-20 20:44:15
【问题描述】:

我在将自定义 DLL 加载到 OpenEdge Enviroment 时遇到了一些问题。

我已经将我的 DLL 复制到 PROPATH 值并将 DLL 导入到 ProAsmRef.exe 中(DLL 与 ProAsmRef 和 assemblys.xml 位于同一文件夹中)

问题是,当我尝试在过程中加载我的自定义文件时,它向我发送了当前错误:

**Unknown table name PCControl. (200)

我已经在我的定义块中导入了 DLL:

USING PCControl.*.

我的 DLL 依赖于另一个 DLL (System.DirectoryServices.dll),但已经在 assemblys.xml 中。

我不明白为什么 PCControl 没有导入,因为我已经有另外两个 DLL,它们工作得很好......

谢谢您的帮助!

我的 DLL 代码:

using System;
using System.DirectoryServices;
using System.Runtime.InteropServices;
using Microsoft.Office.Interop.Outlook;

namespace PCControl{

public class PCC{

public static string AzureLogin(string user, string password) {

        string status;

        try {
            DirectoryEntry entry = new DirectoryEntry("LDAP://AUTOEXPR.COM", user, password) {
                AuthenticationType = AuthenticationTypes.Secure,
                Username = user,
                Password = password
            };

            DirectorySearcher _searcher = new DirectorySearcher(entry);
            _searcher.Filter = "(objectclass=user)";
            SearchResult _sr = _searcher.FindOne();
            string? _name = _sr.Properties["displayname"][0].ToString();

            status = "SUCCESS - User " + user + " has logged in.";

        } catch (System.Exception e) {
            status = "ERROR - While logging in: " + e.ToString();

        }

        return status;
    }
}
}

我的XML:

    <?xml version="1.0" encoding="utf-8"?>
<references xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <assembly name="ClassADT, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <assembly name="ClassOPC, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <assembly name="PCControl, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <assembly name="System.DirectoryServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</references>

我的 login.p(恢复):

    &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE Login C-Win 
PROCEDURE Login :
/*------------------------------------------------------------------------------
  Purpose:     
  Parameters:  <none>
  Notes:       
------------------------------------------------------------------------------*/
 
    DEF VAR lSuccess AS CHAR NO-UNDO.
 
    lSuccess = PCControl.PCC:AzureLogin("arorap1", "12345").
 
    MESSAGE lSuccess
        VIEW-AS ALERT-BOX INFO
        TITLE "ok".
 
 
END PROCEDURE.
 
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
 

这个问题与我在 DLL 中的代码无关......我已经在我同事的 DLL 中添加了这个函数并且它工作得很好:

USING ClassADT.*.

DEFINE VARIABLE LSuccess AS CHAR NO-UNDO.
    IF AVAIL usr_param AND usr_param.usr_ativo EQ TRUE THEN
        lSuccess = ClassADT.MyAdt:MyLogin(txtUser:SCREEN-VALUE, txtPassword:SCREEN-VALUE).
            

【问题讨论】:

    标签: openedge progress-4gl


    【解决方案1】:

    根本不需要也不建议将自定义 .NET 程序集和 assemblys.xml 文件放在 c:dlc117in 文件夹中。

    此外,您的第一个假设是那些需要在 PROPATH 中的假设是不正确的。

    Progress 提供了 -assemblies 启动参数,该参数可用于指向包含 assemblies.xml 文件以及自定义 .NET 程序集(.dll 文件)的文件夹。

    【讨论】:

    • 为什么不建议进入bin文件夹?关于 -assemblies 启动命令在我的情况下不实用,因为我们有超过 100 个快捷方式来执行应用程序(跨越大约 30 多台服务器)。这个想法只是在每台服务器上安装一个,然后就可以开始了。 (完成复制程序集和 dll)
    【解决方案2】:

    尝试与您的类​​交互时不要引用您的命名空间。命名空间和类名之间的句点不是要使用的正确语法。

    更改为以下应该有效。

    lSuccess = PCC:AzureLogin("arorap1", "12345").

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-17
      • 2023-04-08
      • 2013-07-02
      • 1970-01-01
      • 2021-12-19
      • 2023-03-20
      • 1970-01-01
      相关资源
      最近更新 更多