我已根据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
此外,这对我来说是最有趣的部分,它会抛出"无法创建自动化对象"在64位Windows Server系统上的Domino 64位服务器上作为LotusScript http代理运行时。
您是否有任何想法如何让DLL函数调用同时使用32位和64位Lotus Domino服务器?
或者是否还有其他方法可以从Notes中调用C#DLL中的单个函数,它将单个字符串作为参数并返回一个字节数组? (例如,通过Java代理,通过Domino shell对象,或两者兼而有之?)
答案 0 :(得分:2)
我刚刚找到了解决方案,而且根本不是Domino问题。链接教程适用于64位之前的系统,并说:
- 要通过COM接口访问此DLL中的对象,请输入以下命令:
醇>
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位。
答案 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它会给你一个莲花解决方案。