Dolphin Smalltalk 中的 WinSCP .NET 程序集注册错误



我正在尝试在Dolphin 6.1b2中使用第三方DLL(WinSCP .NET程序集)。我已经注册了DLL并在Windows 7中生成了一个TypeLib。

在 Dolphin 中,我成功地使用组件向导生成接口,但是当我尝试注册控件和 TypeLib 时,我遇到了错误。在注册控件时,我得到

WinSCPnet.dll已加载,但找不到DllRegisterServer入口点。

有谁知道它为什么失败?我也问过DLL的作者,他倾向于海豚问题,因为注册在Windows中工作。

DLL 是一个 .NET 程序集,导入生成的 TLB。

从以下位置下载了".NET 汇编/自动化包": https://winscp.net/eng/download.php

未包装,按照包含的readme_automation.txt注册。
另请参阅下载和安装 WinSCP .NET 程序集

启动新的海豚,导入.tlb,用WinSCP前缀生成(所以类不会以_开头)。

打开工作区,导入WinSCP_Constants池,转换 C# 示例的启动 (https://winscp.net/eng/docs/library#example):

opts := WinSCP_SessionOptions new
            protocol: Protocol_Sftp;
            hostName = 'example.com';
            userName: 'user';
            password: 'mypassword';
            sshHostKeyFingerprint: 'ssh-rsa 2048 ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff';
            yourself.

找回工作对象...

编辑:您的WinSCP论坛概念"为了在海豚中使用它,您需要让它的工具注册dll和tlib"是错误的。COM "源"只需要注册一次(如果是"老式"COM 服务器,您可以使用 regsvr32 或 dolphin - 两者都做同样的事情;如果是 .NET 程序集,您必须使用 .NET 咒语)。海豚方面唯一真正需要的是导入以前注册的库。

如果有.TLB,我会去.TLB,否则试试运气.DLL。可悲的是,对于某些标准COM接口,Microsoft从未提供过typelibs,因此那里的情况更糟(使用C/C++,或手动创建结构/接口表)。

编辑 2 - 进一步的问题:

1)你能解释一下typelib和"我创建"的库类之间的关系吗(即帮助中的海豚教程)

Dolphin 创建 smalltalk 类来镜像 COM 类型/结构。您可以使用它们来实例化 Smalltalk 中的 COM 类型,调用它们的方法,将它们(以及字符串、整数等基元类型)作为参数传递,并获取返回值的 Smalltalk 类型(Dolphin 为您完成所有转换,因此您可以 +- 忘记您正在调用外部代码)。

2) 将库类映射到 Winscp 接口的方法示例。

我什么也没实现,我只是使用了生成的包装器(在后台,WinSCP COM 对象 - SessionOptions - 被创建,并设置了一些属性)。

基本上,我只是说:

var opts = new WinSCP.SessionOptions().
opts.Protocol = Protocol.Sftp;
opts.HostName = .........

只需查看WinSCP自动化文档/示例,然后将其转换为Smalltalk-peak(希望它应该自动神奇地工作;-)。

3) Smalltalk 方法协议:、主机名:等在哪里定义?我搜索了图像,它们不在那里。您是如何知道使用这些方法名称的?

由于SessionOptions(在 Dolphin 中由 [PREFIX]_SessionOptions 类表示)是一个IDispatch接口(Dolphin 中 IDispatch 的子类),因此所有方法调用本质上都是动态的。你只要做正确的事情(并在必要的粒度上捕获可能的故障),它就会"正常工作(tm)"。

Smalltalk sibbing是#doesNotUnderstand: aMessage方法。

最新更新