Ошибка регистрации сборки WinSCP .NET в Dolphin Smalltalk
Я пытаюсь использовать стороннюю DLL (WinSCP .NET сборка) в Dolphin 6.1b2. Я зарегистрировал DLL и сгенерировал TypeLib в Windows 7.
В Dolphin я успешно использовал мастер компонентов для генерации интерфейсов, но когда я пытаюсь зарегистрировать элемент управления и TypeLib, я получаю ошибки. На регистрации контроля я получаю
WinSCPnet.dll был загружен, но точка входа DllRegisterServer не найдена.
У кого-нибудь есть идеи, почему он терпит неудачу? Я также спросил автора DLL, и он склоняется к проблеме с дельфинами, так как регистрация работала в Windows.
1 ответ
DLL является сборкой.NET, импортируйте сгенерированный TLB.
Скачал ".NET сборка / пакет автоматизации" с: https://winscp.net/eng/download.php
Распакован, зарегистрирован согласно readme_automation.txt
,
Смотрите также Загрузка и установка сборки WinSCP .NET.
Начал свежий Дельфин, импортировал .tlb
, созданный с WinSCP
префикс (чтобы классы не начинались с _
).
Открытое рабочее пространство, импортированный пул WinSCP_Constants, преобразованное начало примера C# ( https://winscp.net/eng/docs/library):
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) Можете ли вы объяснить взаимосвязь между typelib и библиотечным классом, который "я создаю" (например, учебник по дельфинам в справке)
Dolphin создает классы smalltalk для отражения типов / структур COM. Вы используете их для создания экземпляров COM-типов из Smalltalk, вызова их методов, передачи их (а также примитивных типов, таких как строки, целые числа, ...) в качестве аргументов и получения типов Smalltalk для возвращаемых значений (Dolphin выполняет все преобразования за вас, поэтому Вы можете +- забыть, что вы называете иностранный код).
2) пример реализованного вами метода отображения класса библиотеки на интерфейс winscp.
Я ничего не реализовал, я просто использовал сгенерированную оболочку (в фоновом режиме, WinSCP COM-объект - SessionOptions
- был создан, и некоторые свойства были установлены).
в основном я просто сказал:
var opts = new WinSCP.SessionOptions().
opts.Protocol = Protocol.Sftp;
opts.HostName = .........
Достаточно взглянуть на документацию / примеры WinSCP Automation, а затем преобразовать их в разговорный язык (и, надеюсь, он должен автоматически работать;-).
3) где определены протокол методов smalltalk:, hostName: и т. Д.? Я искал изображение, и их там нет. как вы узнали, как использовать эти имена методов?
поскольку SessionOptions
(представлена [PREFIX]_SessionOptions
класс в дельфинах) является IDispatch
интерфейс (подкласс IDispatch
в Dolphin) все вызовы методов носят динамический характер. Вы просто делаете правильные вещи (& ловите возможные сбои при необходимой детализации), и это будет "просто работать (тм)".
Smalltalk родной #doesNotUnderstand: aMessage
метод.