C#dll方法在C#中不可用,但在VB中可用

  • 本文关键字:但在 VB 方法 C#dll c#
  • 更新时间 :
  • 英文 :


我有一个C#项目和另一个VB项目。我使用Kofax dll,我想调用一个方法来设置字段值。我实际上在用Kofax。DBLiteOpt。在vb中,我有一个调用方法和设置值的实现:

For Each oDoc As ACDataElement In oDocumentCol 
If oDoc.AttributeValue("Note") <> "" Then
oDoc.AttributeValue("Note") = "Value assigned ..."
End If
Next

在C#中。。。在编译之前我有一个错误:ACDataElement不包含";AttributeValue";定义

foreach (ACDataElement oDoc in oDocumentCol)
{
oDoc.AttributeValue("Note")= "whatever";
}

这是我看到的实现。它已经在C#中实现了。

这是一个名为的接口

namespace Kofax.DBLiteOpt
{
[Guid("AA7473C3-85D1-46C7-9FB6-5AE29E00EA5D")]
[CoClass(typeof (ACDataElementClass))]
[ComImport]
public interface ACDataElement : _ACDataElement
{
}
}

这是_ACDataELement

namespace Kofax.DBLiteOpt
{
[TypeLibType(TypeLibTypeFlags.FHidden | TypeLibTypeFlags.FDual | TypeLibTypeFlags.FNonExtensible | TypeLibTypeFlags.FDispatchable)]
[Guid("AA7473C3-85D1-46C7-9FB6-5AE29E00EA5D")]
[ComImport]
public interface _ACDataElement
{
[DispId(1610809359)]
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
bool AttributeExists([MarshalAs(UnmanagedType.BStr), In] string strAttributeName);
[DispId(1745027079)]
Collection AttributeNames { [DispId(1745027079), MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] [return: MarshalAs(UnmanagedType.Interface)] get; }
[DispId(0)]
[IndexerName("AttributeValue")]
string this[[MarshalAs(UnmanagedType.BStr), In] string strAttributeName] { [DispId(0), MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] [param: MarshalAs(UnmanagedType.BStr), In] set; [DispId(0), MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] [return: MarshalAs(UnmanagedType.BStr)] get; }
...
}

其他注意:我在visual studio中使用rider和visual studio反编译dll我有这个

[DispId(1745027079)]
Kofax.VBA.Interop.Collection AttributeNames { get; }
[DispId(0)]
string this[string strAttributeName] { get; set; }

是否存在任何配置问题?

  • vb应用程序目标。NET Framework 4.2,但也适用于4.8
  • c#应用程序目标。NET Framework 4.8,C#版本为8

行为差异有什么原因吗??我还试着使用oDoc["注意"],但我确实有一个在vb:中没有得到的错误

System.Exception
HResult=0x80131500
Message=Kofax.Capture.DBLiteOpt: [11012] Kofax.Capture.DBLiteOpt: Cet attribut ne peut pas être mis à jour. (Document, BatchDocGUID)
Source=KC.CM.Divalto
Arborescence des appels de procédure :
à KC.CM.Divalto.Program.Run(String[] args) dans D:__devsKC.CM.DivaltoProgram.cs :ligne 80
à KC.CM.Divalto.Program.Main(String[] args) dans D:__devsKC.CM.DivaltoProgram.cs :ligne 20

错误消息表示我无法使用此符号(oDoc["Note"](更新值

您正试图将索引器作为方法调用。正确的语法是:

foreach (ACDataElement oDoc in oDocumentCol)
{
oDoc["Note"] = "whatever";
}

更新:根据Hans Passant的评论更新。

最新更新