2016-07-14 12 views
1

Dolphin 6.1b2에서 타사 DLL (WinSCP .NET 어셈블리)을 사용하려고합니다. DLL을 등록하고 Windows 7에서 TypeLib을 생성했습니다.Dolphin Smalltalk에서 WinSCP .NET 어셈블리 등록 오류가 발생했습니다.

Dolphin에서 구성 요소 마법사를 사용하여 성공적으로 인터페이스를 생성했지만 컨트롤 및 TypeLib를 등록하려고하면 오류가 발생합니다. 컨트롤을 등록 할 때

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을 수입 참조하십시오. 다시

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에 포럼의 개념 "순서

개설 작업 공간은 WinSCP_Constants 풀 수입의 C# 예제의 시작 (https://winscp.net/eng/docs/library#example)로 변환 돌고래에서 도구를 사용하려면 dll과 tlib를 등록해야합니다. "이 잘못되었습니다. COM "소스"는 한 번만 등록해야합니다 ("구식"COM 서버의 경우 regsvr32 또는 dolphin을 사용할 수 있습니다. 둘 다 동일하게 수행 할 수 있으며 .NET 어셈블리의 경우에는 .NET 주문을 사용해야 함)). 돌고래 측에서 정말로 필요한 것은 이전에 등록한 라이브러리를 가져 오는 것입니다.

.TLB이있는 경우 .TLB으로 가고, 그렇지 않은 경우 .DLL으로 내 행운을 시험해보십시오. 안타깝게도 일부 표준 COM 인터페이스에서는 Microsoft가 typelib을 사용할 수 없으므로 C/C++을 사용하거나 손으로 구조체/인터페이스 테이블을 만들면 더 나빠질 수 있습니다.

편집 2 - 추가 질문 :

1) 당신은 형식 라이브러리 및 도움말 (즉, 돌고래 자습서를) "내가 만드는"

돌고래가 거울에 스몰 토크 클래스를 생성하는 라이브러리 클래스 사이의 관계를 설명 할 수 COM 유형/구조. 이를 사용하여 스몰 토크에서 COM 유형을 인스턴스화하고 메소드를 호출하고 인수 (문자열, 정수 등의 원시 유형)를 인수로 전달하고 리턴 된 값에 대해 스몰 토크 유형을 얻습니다 (Dolphin은 모든 변환을 수행하므로 당신은 + 외국 코드를 ​​호출하는 것을 잊을 수 있습니다.)

2) 라이브러리 클래스를 winscp 인터페이스에 매핑하여 구현 한 방법의 예.

구현 된 래퍼 (배경, WinSCP COM 개체 - SessionOptions - 생성 된 일부 속성 집합이 있음)에서 생성 된 래퍼를 사용했습니다.

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

그냥 발언을 스몰 토크로 변환 한 후 WinSCP에 자동화 문서/예제를보고, (희망, 그것은 자동 마술 ;-) 작동합니다 :

기본적으로, 난 그냥 말했다.

3) smalltalk 메소드는 어디에 있습니까? : hostName : 등이 정의되어 있습니까? 나는 이미지를 검색했고 거기에 없다. 어떻게 그 메소드 이름을 사용했는지 어떻게 알았습니까?

([PREFIX]_SessionOptions 돌고래의 클래스로 표시) SessionOptionsIDispatch 인터페이스 (IDispatch 돌고래에서의 서브 클래스)이므로 모든 메소드 호출은 자연에서 동적이다. 당신은 옳은 일을 수행하고 (& 필요한 세분성으로 가능한 실패를 잡아라.), "그냥 일한다."

스몰 토크시 블링은 #doesNotUnderstand: aMessage 방법입니다.

+0

추신 : 나는이 있다면, 거기 ... –

+0

미로슬라프, 난 당신의 지침과 예제를 따라하고 유효한 인스턴스를 다시 얻었다 게시, 당신은 또한 요청 WinSCP에 포럼에 거 subscripbe 아니에요. 감사! – Duetto

+0

miroslav, 1) 내가 작성한 라이브러리 클래스와 유형 라이브러리 (예 : 돌고래 자습서) 간의 관계를 설명 할 수 있습니까? 2) 구현 한 메소드의 예 : 라이브러리 클래스를 winscp 인터페이스에 매핑합니다. – Duetto