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

时间:2016-07-14 13:59:28

标签: com smalltalk winscp-net typelib dolphin-smalltalk

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

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

  

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

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

1 个答案:

答案 0 :(得分:2)

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

https://winscp.net/eng/download.php下载“。NET程序集/自动化程序包”

解压缩,按照readme_automation.txt注册 另请参阅Downloading and Installing WinSCP .NET Assembly

启动了新的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方法protocol:,hostName:等在哪里定义?我搜索了图像,他们不在那里。您是怎么知道使用这些方法名称的?

由于SessionOptions(由Dolphin中的[PREFIX]_SessionOptions类表示)是IDispatch接口(Dolphin中IDispatch的子类),因此所有方法调用本质上都是动态的。你只是做正确的事情(并以必要的粒度捕捉可能的失败),它将“正常工作(tm)”。

Smalltalk sibbling是#doesNotUnderstand: aMessage方法。