2016-07-14 41 views
1

私はイルカの6.1b2にサードパーティのDLL(WinSCPの.NETアセンブリ)を使用しようとしています。私は、DLLを登録して、私は成功したインターフェースを生成するためのコンポーネントウィザードを使用しますが、私はエラーを取得制御し、タイプライブラリを登録しようとすると、イルカでのWindows 7でWinSCPの.NETアセンブリの登録エラー

をタイプライブラリを生成しました。コントロールの登録時に取得する

WinSCPnet.dllがロードされましたが、DllRegisterServerエントリポイントが見つかりませんでした。

誰もが、それが失敗している理由の任意のアイデアを持っていますか?また、DLLの作成者に尋ねたところ、Windowsで登録が行われて以来、彼はDolphinの問題に傾いています。

答えて

2

DLLは、.NETアセンブリであり、生成されたTLBをインポートします。 readme_automation.txtを含まにつきとして登録https://winscp.net/eng/download.php

アンパック、:

ダウンロード".NETアセンブリ/自動化パッケージ" から
も参照Downloading and Installing WinSCP .NET Assembly

は、新鮮なイルカを開始(そのクラスは_で起動しないでしょう)WinSCP接頭辞で生成され、.tlbを輸入しました。

ワークスペースをオープンし、C#の例(https://winscp.net/eng/docs/library#example)の開始を変換し、WinSCP_Constantsプールをインポート:

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. 

が戻って作業対象物を手に入れた...

EDIT:あなたのWinSCPのフォーラム概念「ために、あなたがドルフィンとtlibを登録するツールを持っている必要があります。 "は間違っています。 COM "ソース"は一度だけ登録する必要があります( "旧式の" COMサーバーの場合、regsvr32またはdolphinのどちらも使用できますが、どちらも同じです; .NETアセンブリの場合は、.NETの呪文)。イルカ側で本当に必要なのは、以前に登録したライブラリをインポートすることだけです。

.TLBがある場合は、.TLBに行きます。それ以外の場合は.DLLで私の運を試してください。残念ながら、いくつかの標準COMインターフェイスでは、Microsoftはtypelibを利用できないため、そこではさらに悪化しています(C/C++を使用するか、手作業で構造体/インターフェイステーブルを作成します)。

編集2 - さらなる質問:

1)あなたは、「私が作成した」タイプライブラリとライブラリのクラス間の関係を説明することができます(ヘルプのすなわちイルカチュートリアル)

イルカは、ミラーにSmalltalkのクラスを作成しますCOMタイプ/構造。あなたはそう、イルカがあなたのためのすべての変換を行います(、SmalltalkのからCOM型のインスタンスを作成、そのメソッドを呼び出して、それらを渡す(およびまた、文字列、整数、...などのプリミティブ型)の引数として、また返された値のためのSmalltalkの種類を取得するためにこれらを使用します+あなたが外国のコードを呼んでいることを忘れることができます)。

2)あなたはWinSCPのインターフェイスにライブラリのクラスをマッピング実装方法の一例。

私は何も実装しませんでした。私はちょうど生成されたラッパーを使用しました(バックグラウンドで、WinSCP COMオブジェクト - SessionOptions - いくつかのプロパティが設定されていました)。

基本的に、私は言った:

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

ちょうどWinSCPのオートメーションドキュメント/例を見て、そしてそれは、話すのSmalltalkのために(そして、できれば、それは自動魔法;-)動作するはず変換します。

3)smalltalkメソッドはどこですか?protocol :, hostName:などは定義されていますか?私は画像を検索し、彼らはそこにいません。これらのメソッド名をどうやって使用するのですか?

(ドルフィンで[PREFIX]_SessionOptionsクラスによって表される)SessionOptionsIDispatchインタフェース(イルカでIDispatchのサブクラス)であるためには、すべてのメソッド呼び出しは、本質的に動的です。あなたはちょうどいいことをして(&は必要な粒度で起こりうる失敗を捕まえます)、それは「ちょうどうまくいく(tm)」でしょう。

スモールトークシブリングは#doesNotUnderstand: aMessageメソッドです。

+0

PS:WinSCPフォーラムに加入してもらえませんでした。もしこれがあれば、そこに投稿してください... –

+0

miroslav、私はあなたの指示と例を守り、有効なインスタンスを取り戻しました。ありがとう! – Duetto

+0

miroslav、1)私が作成したライブラリとtypelibとの関係について説明することができます(つまり、ヘルプのイルカチュートリアル)2)実装したメソッドの例:ライブラリクラスをwinscpインターフェイスにマッピングします。 – Duetto

関連する問題