2017-03-16 1 views
0

NAV에서 사용할 수없는 추가 기능에 대한 필요성이있는 Navision 2009 SP1 (클래식 클라이언트)에 대한 보고서를 개발 중입니다.Navision C/AL C# COM dll로 오류 만들기

나는 C#에서 COM dll을 만들고 (InstallShield "free"vs version을 사용하여) 설치하고 NAV에 자동화 변수를 만들었습니다. 클래스와 인터페이스를 볼 수 있고 Print 메서드를 볼 수 있지만 변수를 만들려고하면 다음 오류가 발생합니다.

"OLE 컨트롤 또는 자동화 서버의 인스턴스를 만들 수 없습니다 ... .. OLE 컨트롤 또는 자동화 서버가 올바르게 설치 및 등록되어 있는지 확인하십시오. " 4.0 (

[ComVisible(true), Guid("080a97fb-321c-4a2f-b948-dd52ce263415"), InterfaceType(ComInterfaceType.InterfaceIsDual)] 
public interface IPrinterTest 
{ 
    [DispId(1)] 
    bool Print(string test, string bytesInStringRepresentation); 
} 

[ClassInterface(ClassInterfaceType.None), ComVisible(true), Guid("8d7b85a9-1a20-4ea0-a7d4-decf26632eee"), ProgId("Printer.PrinterTest")] 
public class PrinterTest : IPrinterTest 
{ 
    public PrinterTest() 
    { 

    } 

    public bool Print(string test, string bytesInStringRepresentation) 
    { 
     return true; 
    } 
} 

생산 환경만을 지원 .NET Framework Client Profile (3.5 및 4.0)을 가지고, 이것은 RegAsm을 사용할 수 있음을 의미

이것은 코드입니다 (바로 연결 것을 얻으려고 노력)) 그리고 그 gacutil되지 않습니다.

나는 Navision에서 dll을 사용할 수 있기 때문에 InstallShield가 아니라 내 코드에 이상이 있다고 가정하고 있습니다. 그리고 nav 자동화 변수를 만들려고 할 때 문제가 발생합니다.

안부

+0

내가 여기있는 다운 투표 문화를 이해하지 못한다. 나는 정말로 그렇지 않다. 내 질문이 만족스럽지 않다고 생각하면 왜 내 의견을 말하지 않으시겠습니까? 내가 뭘 잘못하고 있는지 알려주지 않으면 향상시킬 수 없습니다. – Starwop

+0

'CREATE (NameAutomationVariable)'라인에서 에러가 발생 했습니까? –

+0

예, "CREATE (NameAutomationVariable)"할 때 오류가 발생합니다. CREATE 결과를 사용하면 항상 false를 반환합니다. – Starwop

답변

0

좋아 마커스, 그래서 위의 코드와 아무 잘못, 분명히 비주얼 스튜디오가 없습니다 또한 설치 도구 세트가 있습니다.

새로운 솔루션을 만들고 라이브러리 프로젝트를 다시 만들고 InstallShield 프로젝트 대신 VS 설치 프로그램 프로젝트를 추가했습니다. 필자는 라이브러리 어셈블리가 강력하게 서명되었는지 확인하고 생성 된 TLB 파일을 설치 프로그램 프로젝트의 "FileSystem"에 추가했습니다. 설치 프로그램 프로젝트는 자동으로 TLB 파일을 종속 파일로 등록하므로 나중에 "FileSystem"에서 TLB 파일을 삭제할 수 있습니다.

이 설정으로 COM interop 용 DLL을 올바르게 등록 할 수있었습니다. 기억해야 할

그래서 키 포인트는 내가 (인터페이스와 클래스)처럼 같은 설정이있는 경우

  • 는, 둘 다 대해 ComVisible 공공 있는지 확인하십시오. 또한 일치하는 이름을 가져야합니다 (예 : "IPrinterTest"& "PrinterTest"
  • 어셈블리의 서명이 강한 지 확인하십시오.
  • DLL 용 TLB 파일을 생성하고 설치 프로그램 "FileSystem"에 추가해야합니다.

전체적인 프로세스를 자세히 설명하는 블로그 게시물로 나중에이 답변을 편집합니다.