DLL 是一个 .NET 程序集,导入生成的 TLB。
从以下网址下载“.NET 程序集/自动化包”:https ://winscp.net/eng/download.php
开箱,按照随附注册readme_automation.txt。
另请参阅下载和安装 WinSCP .NET 程序集
开始新鲜的 Dolphin,导入.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 论坛概念“为了在 dolphin 中使用它,您需要让其工具注册 dll 和 tlib”是错误的。COM“源”只需要注册一次(在“老式”COM 服务器的情况下,您可以使用 regsvr32 或 dolphin - 两者都一样;在 .NET 程序集的情况下,您必须使用 .NET 咒语)。海豚方面唯一真正需要的是导入以前注册的库。
如果有.TLB,我会去.TLB,否则试试我的运气.DLL。遗憾的是,对于某些标准 COM 接口,Microsoft 从未提供过类型库,因此情况更糟(使用 C/C++,或手动创建结构/接口表)。
编辑 2 - 进一步的问题:
1)你能解释一下类型库和“我创建”的库类之间的关系吗(即帮助中的海豚教程)
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-speak(希望它会自动神奇地工作 ;-)。
3)smalltalk方法协议:,hostName:等在哪里定义?我搜索了图像,但它们不存在。你怎么知道使用这些方法名称?
由于SessionOptions(在 Dolphin 中由[PREFIX]_SessionOptions类表示)是一个IDispatch接口(IDispatch在 Dolphin 中的子类),所有方法调用本质上都是动态的。您只需做正确的事情(并以必要的粒度捕获可能的故障),它就会“正常工作(tm)”。
Smalltalk 兄弟姐妹是#doesNotUnderstand: aMessage方法。