Ошибка регистрации сборки 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 метод.

Другие вопросы по тегам