64 位系统上的 Lotus Domino:无法创建自动化对象,错误 208

Lotus Domino on 64 bit system: Could not create automation object, error 208

我已经根据 http://www-01.ibm.com/support/docview.wss?uid=swg21230705 使用 Release/AnyCPU 创建了一个 C# .NET DLL,并成功地为 COM Interop 注册了它。

当我在32位Windows 10上打开我的32位Excel,并使用代码

Private Sub CommandButton1_Click()
    Dim obj As Variant
    Set obj = CreateObject("MyTest")
    MsgBox obj.AppendStr("This is")
End Sub

它 returns 预期值。当我在 64 位 Windows 8.1 上打开 32 位 Excel 并使用相同的代码时,它也会 returns 预期值。部署在两个系统上的类似制作的 VB6 可执行文件也是如此。

但是当我使用代码

从 Notes 32 位尝试相同的操作时
Sub Click(Source As Button)
    Dim obj As Variant 
    set obj = CreateObject("MyTest") 
    MsgBox obj.AppendStr("This is")
End Sub

此外,这对我来说是最有趣的部分,当 运行 在 64 位 Windows 上的 Domino 64 位服务器上作为 LotusScript http 代理时,它抛出 "Could not create automation object"服务器系统.

您是否知道如何让 DLL 函数调用与 32 位和 64 位 Lotus Domino 服务器一起工作?

或者是否有任何其他方法可以从 Notes 调用我的 C# DLL 中的单个函数,该函数将单个字符串作为参数并 returns 一个字节数组? (例如,通过 Java 代理,通过 Domino shell 对象,或两者兼而有之?)

要回答技术方面的问题,您可以通过将 32 位 DLL 复制到 Windows\SysWow64 来调用它。有关详细信息,请参阅 Can a 64 bit EXE link against 32-bit DLLs?

为了满足您的需求,我们只需要将字符串转换为字节数组。

您可以在 java 中执行此操作并使用 ls2j 来调用它。

我也想用native consumer的lib来做这个

另请参阅 https://www.experts-exchange.com/questions/23120423/Using-NotesStream-to-convert-a-string-to-a-byte-array.html 它为您提供了一个 lotuscript 解决方案。

我刚刚找到了解决方案,这根本不是 Domino 问题。链接的教程适用于 64 位之前的系统并说:

  1. To make the objects in this DLL accessible via the COM interface, enter the following command:
    regasm MyTest.dll

既然引入了AMD64,这一步就得看如下:

  1. 要使 32 位和 64 位应用程序都可以通过 COM 接口访问此 DLL 中的对象,请输入 BOTH 以下命令:

    %Windir%\Microsoft.NET\Framework\<version>\regasm MyTest.dll
    %Windir%\Microsoft.NET\Framework64\<version>\regasm MyTest.dll
    

我只做了第一个,它适用于 32 位,但不适用于 64 位。