2016-07-14 27 views
1

Ich versuche, eine DLL von Drittanbietern (WinSCP .NET-Assembly) in Dolphin 6.1b2 zu verwenden. Ich habe die DLL registriert und eine TypeLib in Windows 7 generiert.WinSCP .NET Assembly-Registrierungsfehler in Dolphin Smalltalk

In Delphin habe ich erfolgreich den Komponenten-Assistenten verwendet, um die Schnittstellen zu generieren, aber wenn ich versuche, das Steuerelement und TypeLib zu registrieren, erhalte ich Fehler. Bei der Registrierung der Kontrolle bekomme ich

WinSCPnet.dll wurde geladen, aber DllRegisterServer Einstiegspunkt konnte nicht gefunden werden.

Hat jemand eine Idee, warum es scheitert? Ich habe auch den Autor der DLL gefragt und er neigt zu einem Dolphin-Problem, seit die Registrierung in Windows funktioniert hat.

Antwort

2

Die DLL ist eine .NET-Assembly, importieren Sie den generierten TLB.

heruntergeladen ".NET-Assembly/Automatisierungspaket" aus: https://winscp.net/eng/download.php

Ausgepackt, registriert pro readme_automation.txt enthalten.
Siehe auch Downloading and Installing WinSCP .NET Assembly

frisch Dolphin gestartet, die .tlb importiert, mit WinSCP Präfix erzeugt (so die Klassen nicht mit _ beginnen würde).

Eröffnet Arbeitsbereich importiert die WinSCP_Constants Pool, umgewandelt Start des C# Beispiel (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. 

Got Arbeits Objekt zurück ...

EDIT: Ihr WinSCP Foren Begriff „um Um es innerhalb von Delphin zu verwenden, müssen Sie seine Werkzeuge haben, die DLL und Tlib registrieren " ist falsch. Die COM "source" muss nur einmal registriert werden (Bei "old-school" COM-Server kann man entweder regsvr32 oder dolphin verwenden - beides tut dasselbe; im Falle der .NET Assembly muss man die .NET-Beschwörung verwenden). Das einzige, was auf der Delfin-Seite wirklich benötigt wird, ist die zuvor registrierte Bibliothek zu importieren.

Wenn es .TLB ist, würde ich für .TLB gehen, andernfalls versuchen mein Glück mit .DLL. Leider hat Microsoft für einige Standard-COM-Schnittstellen keine typelibs verfügbar gemacht, daher ist es dort noch schlimmer (benutze C/C++ oder erstelle struct/interface-Tabellen von Hand).

Edit 2 - weitere Fragen:

1) können Sie die Beziehung zwischen den typelib und der Bibliothek Klasse erklären, die (dh Delphin Tutorial-Hilfe) Spiegel

Dolphin schaffen Klassen smalltalk "i erstellen" die COM-Typen/-Strukturen. Sie verwenden diese, um COM-Typen aus Smalltalk zu instanziieren, ihre Methoden aufzurufen, sie (und auch primitive Typen wie Strings, Integer, ...) als Argumente zu übergeben und Smalltalk-Typen für zurückgegebene Werte zu erhalten (Dolphin übernimmt alle Konvertierungen für Sie) Sie können + - vergessen, dass Sie einen fremden Code aufrufen.

2) ein Beispiel für die Methode, die Sie implementiert haben, indem Sie die Bibliotheksklasse der winscp-Schnittstelle zuordnen.

Ich habe nichts implementiert, ich habe nur den generierten Wrapper (im Hintergrund, WinSCP COM-Objekt - SessionOptions - wurde erstellt, und hatte einige Eigenschaften festgelegt).

im Grunde, ich sagte nur:

var opts = new WinSCP.SessionOptions(). 
opts.Protocol = Protocol.Sftp; 
opts.HostName = ......... 

Gerade bei WinSCP Automation Dokumentation/Beispiele, und es dann konvertieren smalltalk-sprechen (und hoffentlich auch, es sollte auto-magisch arbeiten ;-).

3) wo sind die smalltalk-methoden protocol :, hostName :, etc definiert? Ich habe das Bild gesucht und sie sind nicht da. Woher wussten Sie, diese Methodennamen zu verwenden?

Da SessionOptions (durch [PREFIX]_SessionOptions Klasse in Dolphin dargestellt) eine IDispatch Schnittstelle (Subklasse von IDispatch in Dolphin) ist, werden alle Methodenaufrufe sind dynamischer Natur. Sie tun nur die richtigen Dinge (& fangen mögliche Fehler bei der notwendigen Granularität), und es wird "nur funktionieren (tm)".

Smalltalk sibbling ist die #doesNotUnderstand: aMessage Methode.

+0

PS: Ich werde nicht zu winSCP Foren abonnieren, wo Sie auch gefragt haben, ob es das ist, posten Sie es dort ... –

+0

miroslav, ich folgte Ihren Anweisungen und Beispiel und erhielt eine gültige Instanz zurück. Vielen Dank! – Duetto

+0

miroslav, 1) können Sie die Beziehung zwischen der typelib und der Bibliothek Klasse, die ich erstellen (dolphin Tutorial in der Hilfe) zu erklären 2) ein Beispiel für die Methode, die Sie die Bibliotheksklasse auf die winscp-Schnittstelle zuordnen implementiert. – Duetto