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 "чтобы использовать его в дельфине, вам нужно, чтобы его инструменты зарегистрировали dll и tlib" неверно. «Источник» COM необходимо зарегистрировать только один раз (в случае «старомодного» COM-сервера вы можете использовать либо regsvr32, либо dolphin — оба делают то же самое; в случае сборки .NET вы должны использовать заклинание .NET ). Единственное, что действительно необходимо на стороне дельфина, — это импортировать ранее зарегистрированную библиотеку.
Если есть .TLB
, я бы выбрал .TLB
, иначе попытаю счастья с .DLL
. К сожалению, для некоторых стандартных COM-интерфейсов Microsoft никогда не делала библиотеки типов доступными, так что там все еще хуже (используйте C/C++ или создавайте таблицы структур/интерфейсов вручную).
Редактировать 2 - дополнительные вопросы:
1) можете ли вы объяснить связь между typelib и библиотечным классом, который «я создаю» (т.е. учебник по дельфинам в справке)
Dolphin создает классы smalltalk для отражения типов/структур COM. Вы используете их для создания экземпляров COM-типов из Smalltalk, вызываете их методы, передаете их (а также примитивные типы, такие как строки, целые числа, ...) в качестве аргументов и получаете типы Smalltalk для возвращаемых значений (Dolphin выполняет все преобразования за вас, поэтому вы можете +- забыть, что вы звоните по иностранному коду).
2) пример реализованного вами метода сопоставления библиотечного класса с интерфейсом winscp.
Я ничего не реализовал, я просто использовал сгенерированную оболочку (в фоновом режиме COM-объект WinSCP - SessionOptions
- был создан и имел некоторые свойства).
в общем, я просто сказал:
var opts = new WinSCP.SessionOptions().
opts.Protocol = Protocol.Sftp;
opts.HostName = .........
Просто просмотрите документацию/примеры автоматизации WinSCP, а затем преобразуйте их в малый разговор (и, надеюсь, это должно работать автоматически ;-).
3) где определены методы smalltalk: protocol:, hostName: и т. д.? Я искал изображение, и их там нет. как вы узнали, что нужно использовать эти имена методов?
Поскольку SessionOptions
(представленный классом [PREFIX]_SessionOptions
в Dolphin) является интерфейсом IDispatch
(подклассом IDispatch
в Dolphin), все вызовы методов являются динамическими по своей природе. Вы просто делаете правильные вещи (и отлавливаете возможные сбои с необходимой степенью детализации), и это будет «просто работать (тм)».
Родственный язык Smalltalk — это метод #doesNotUnderstand: aMessage
.
person
Miloslav Raus
schedule
14.07.2016