我试图在Dolphin 6.1b2中使用第三方DLL(WinSCP .NET程序集)。我已在Windows 7中注册了DLL并生成了TypeLib。
在Dolphin中,我成功使用了组件向导来生成接口,但是当我尝试注册控件和TypeLib时,我得到了错误。在注册控件时我得到了
已加载WinSCPnet.dll,但找不到DllRegisterServer入口点。
有谁知道它为什么会失败?我还问过DLL的作者,因为注册在Windows中工作,他倾向于海豚问题。
答案 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
方法。