OpenEdge Progress 找不到自定义 DLL
OpenEdge Progress not finding custom DLL
我在将自定义 DLL 加载到 OpenEdge Enviroment 时遇到一些问题。
我已经将我的 DLL 复制到 PROPATH 值并将 DLL 导入到 ProAsmRef.exe 中(DLL 与 ProAsmRef 和 assemblies.xml 在同一文件夹中)
问题是,当我尝试在过程中加载我的自定义文件时,它向我发送了当前错误:
**Unknown table name PCControl. (200)
我已经在我的定义块中导入了 DLL:
USING PCControl.*.
我的 DLL 依赖于另一个 DLL (System.DirectoryServices.dll) 但已经在 assemblies.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).
当您使用中间 class 变量时会发生什么?
def var ologin as PCControl.PCC no-undo.
ologin = new PCcontrol.PCC().
ologin:AzureLogin( 'user', 'pass' ).
我认为只有OpenEdge static classes可以像你这样直接使用
所以...我设法通过将 assemblies.xml 从 bin 文件夹复制到根文件夹来修复它。
不知何故,Progress 没有从 PROPATH 文件夹中读取 XML...我已将程序集添加到 DLC117,它正在运行 DLL 中的所有功能。
我在将自定义 DLL 加载到 OpenEdge Enviroment 时遇到一些问题。
我已经将我的 DLL 复制到 PROPATH 值并将 DLL 导入到 ProAsmRef.exe 中(DLL 与 ProAsmRef 和 assemblies.xml 在同一文件夹中)
问题是,当我尝试在过程中加载我的自定义文件时,它向我发送了当前错误:
**Unknown table name PCControl. (200)
我已经在我的定义块中导入了 DLL:
USING PCControl.*.
我的 DLL 依赖于另一个 DLL (System.DirectoryServices.dll) 但已经在 assemblies.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).
当您使用中间 class 变量时会发生什么?
def var ologin as PCControl.PCC no-undo.
ologin = new PCcontrol.PCC().
ologin:AzureLogin( 'user', 'pass' ).
我认为只有OpenEdge static classes可以像你这样直接使用
所以...我设法通过将 assemblies.xml 从 bin 文件夹复制到根文件夹来修复它。
不知何故,Progress 没有从 PROPATH 文件夹中读取 XML...我已将程序集添加到 DLC117,它正在运行 DLL 中的所有功能。