1

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

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

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

有谁知道它为什么失败?我还询问了 DLL 的作者,他倾向于 Dolphin 问题,因为注册在 Windows 中有效。

4

1 回答 1

2

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方法。

于 2016-07-14T14:56:44.170 回答