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

时间:2016-07-29 09:45:23

标签: com lotus-domino com-interop

我已根据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

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

但是当我使用代码

从Notes 32位尝试相同的操作时
Sub Click(Source As Button)
    Dim obj As Variant 
    set obj = CreateObject("MyTest") 
    MsgBox obj.AppendStr("This is")
End Sub
  • 它返回32位Windows 10上的预期值
  • 它会抛出错误"无法创建自动化对象"在64位Windows 8.1

此外,这对我来说是最有趣的部分,它会抛出"无法创建自动化对象"在64位Windows Server系统上的Domino 64位服务器上作为LotusScript http代理运行时。

您是否有任何想法如何让DLL函数调用同时使用32位和64位Lotus Domino服务器?

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

2 个答案:

答案 0 :(得分:2)

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

  
      
  1. 要通过COM接口访问此DLL中的对象,请输入以下命令:
      regasm MyTest.dll
  2.   

自推出AMD64以来,您必须按照以下步骤阅读此步骤:

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

    %Windir%\Microsoft.NET\Framework\<version>\regasm MyTest.dll
    %Windir%\Microsoft.NET\Framework64\<version>\regasm MyTest.dll
    
  2. 我只做了第一个,它使它适用于32位,但不适用于64位。

答案 1 :(得分:1)

要回答技术方面的问题,您可以通过将其复制到Windows \ SysWow64.see Can a 64 bit EXE link against 32-bit DLLs?来调用32位DLL来获取更多详细信息。

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

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

我也认为使用本地消费者的lib来点头。

另见https://www.experts-exchange.com/questions/23120423/Using-NotesStream-to-convert-a-string-to-a-byte-array.html它会给你一个莲花解决方案。