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

Com Dolphin Smalltalk中的WinSCP.NET程序集注册错误,com,smalltalk,winscp-net,typelib,dolphin-smalltalk,Com,Smalltalk,Winscp Net,Typelib,Dolphin Smalltalk,我试图在Dolphin 6.1b2中使用第三方DLL(WinSCP.NET程序集)。我已经在Windows7中注册了DLL并生成了一个类型库 在Dolphin中,我成功地使用组件向导生成接口,但是当我尝试注册控件和类型库时,我得到了错误。在注册我得到的控件时 已加载WinSCPnet.dll,但找不到DllRegisterServer入口点 有人知道为什么会失败吗?我还询问了DLL的作者,他倾向于海豚问题,因为注册在Windows中工作。DLL是.NET程序集,请导入生成的TLB 从以下位置下载

我试图在Dolphin 6.1b2中使用第三方DLL(WinSCP.NET程序集)。我已经在Windows7中注册了DLL并生成了一个类型库

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

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


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

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

从以下位置下载“.NET汇编/自动化软件包”:

根据随附的
readme\u automation.txt

另见

启动了新的Dolphin,导入了
.tlb
,并使用
WinSCP
前缀生成(因此类不会以
开头)

打开工作区,导入WinSCP#U常量池,转换C#示例()的开头:

找到工作对象了

编辑:您的WinSCP论坛概念“为了在dolphin中使用它,您需要让它的工具注册dll和tlib”是错误的。COM“源”只需注册一次(对于“旧学校”COM服务器,您可以使用regsvr32或dolphin-两者的作用相同;对于.NET程序集,您必须使用.NET咒语)。在dolphin端真正需要做的事情是导入以前注册的库

如果有
.TLB
,我会选择
.TLB
,否则就试试
.DLL
。不幸的是,对于一些标准的COM接口,微软从来没有提供过typelibs,所以在那里更糟糕(使用C/C++,或者手工创建结构/接口表)

编辑2-其他问题:

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

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方法协议、主机名等的定义在哪里?我搜索了图像,但它们不在那里。您是如何知道使用这些方法名称的

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


Smalltalk sibbling是
#不理解的:aMessage

方法。

PS:我不会订阅WinSCP论坛,在那里你也会问,如果是这样,就把它发布到那里……miroslav,我按照你的说明和示例,并得到了一个有效的实例。谢谢miroslav,1)您能否解释typelib和我创建的库类之间的关系(即帮助中的dolphin教程)2)您实现的将库类映射到winscp接口的方法示例。
var opts = new WinSCP.SessionOptions().
opts.Protocol = Protocol.Sftp;
opts.HostName = .........