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
- 它 returns 32 位的预期值 Windows 10
- 它在 64 位 Windows 8.1
上抛出错误 "Could not create automation object"
此外,这对我来说是最有趣的部分,当 运行 在 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 位之前的系统并说:
- To make the objects in this DLL accessible via the COM interface, enter the following command:
regasm MyTest.dll
既然引入了AMD64,这一步就得看如下:
要使 32 位和 64 位应用程序都可以通过 COM 接口访问此 DLL 中的对象,请输入 BOTH 以下命令:
%Windir%\Microsoft.NET\Framework\<version>\regasm MyTest.dll
%Windir%\Microsoft.NET\Framework64\<version>\regasm MyTest.dll
我只做了第一个,它适用于 32 位,但不适用于 64 位。
我已经根据 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
- 它 returns 32 位的预期值 Windows 10
- 它在 64 位 Windows 8.1 上抛出错误 "Could not create automation object"
此外,这对我来说是最有趣的部分,当 运行 在 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 位之前的系统并说:
- To make the objects in this DLL accessible via the COM interface, enter the following command:
regasm MyTest.dll
既然引入了AMD64,这一步就得看如下:
要使 32 位和 64 位应用程序都可以通过 COM 接口访问此 DLL 中的对象,请输入 BOTH 以下命令:
%Windir%\Microsoft.NET\Framework\<version>\regasm MyTest.dll %Windir%\Microsoft.NET\Framework64\<version>\regasm MyTest.dll
我只做了第一个,它适用于 32 位,但不适用于 64 位。