2016-07-14 46 views
1

的WinSCP .NET程序集註冊的錯誤我試圖使用海豚6.1b2第三方DLL(WinSCP賦予.NET程序集)。我所註冊的DLL和Windows 7在海豚的Smalltalk

在海豚我成功地使用該組件嚮導生成的接口,但是當我嘗試註冊控件和類型庫我得到的錯誤產生的類型庫。在註冊控制我得到

WinSCPnet.dll被加載,但無法找到DllRegisterServer入口點。

沒有人有任何想法,爲什麼它的失敗?我也問過DLL的作者,並且自從註冊在Windows中工作以來他就傾向於Dolphin問題。

回答

2

的DLL是一個.NET組件,導入所生成的TLB。

下載「.NET組件/自動化包裝」 從https://winscp.net/eng/download.php

解壓後,登記爲每包括readme_automation.txt
參見Downloading and Installing WinSCP .NET Assembly

開始新的海豚,進口.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從來沒有提供過typelib,所以它更糟糕(使用C/C++或者手工創建結構/接口表)。

編輯2 - 進一步的問題:

1)你能解釋一下類型庫和「我創造」的幫助下(即海豚教程)

海豚創建的Smalltalk類鏡圖書館類之間的關係COM類型/結構。你可以使用這些實例從Smalltalk中實例化COM類型,調用它們的方法,並將它們(以及基元類型,如字符串,整數等)作爲參數傳遞,併爲返回值獲取Smalltalk類型(Dolphin爲你做所有轉換,所以你可以+ - 忘記你正在調用外國代碼)。

2)你實現的庫類映射到所述接口的WinSCP的方法的一個例子。我只是使用生成的包裝(在後臺,WinSCP的COM對象 - SessionOptions - 創建,並有一些屬性設置)。

基本上,我只是說:

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

只要看看的WinSCP自動化文檔/實例,然後將其轉換爲Smalltalk的發言(和希望,它應該自動神奇的工作;-)。

3)其中,是Smalltalk的方法協議:,主機名:等定義?我搜索了這張圖片,他們不在那裏。你怎麼知道使用這些方法名稱?

由於SessionOptions(由海豚[PREFIX]_SessionOptions類表示)是一個IDispatch接口(在海豚的IDispatch亞類),所有的方法調用在本質上是動態的。你只要做正確的事情(&在必要的粒度捕捉可能的失敗),它會「只是工作(tm)」。

Smalltalk的sibbling是#doesNotUnderstand: aMessage方法。

+0

PS:我不會subscripbe到WinSCP賦予論壇,在這裏你還問,如果是這樣,它張貼在那裏... –

+0

米羅斯拉夫,我按照您的指示和示例,並沒有得到一個有效的實例。謝謝! – Duetto

+0

的Miroslav,1)你能解釋類型庫,並且我創建庫類(即海豚教程幫助之間的關係)2)你實現的庫類映射到所述接口的WinSCP的方法的一個例子。 – Duetto