2013-07-29 2 views
2

ActiveX 컨트롤을 만들기 위해 Microsoft Visual Studio 프로젝트를 만들었습니다. 그 단계에 대해서는 here을 언급했습니다. HelloWorld.cs라는 클래스 파일을 만들고 "Hello World .."를 반환하는 메서드를 만듭니다. 내가 수행 한 단계는 .. 새 프로젝트 작성 -> 새 클래스 -> HelloWorld.snk 파일을 사용하여 프로젝트에 서명하십시오. 클래스 파일에서 "ProgId", "Guid", "ComVisible"을 추가하여 논리를 구현했습니다. 여기 내 코드는 HelloWorld.cs입니다.HTML 페이지가 IIS에서 호스팅 될 때 ActiveX 컨트롤이 작동하지 않습니다.

using System; 
using System.Runtime.InteropServices; 

namespace ActiveXClass 
{ 
    /// <summary> 
    /// Demo`enter code here` HelloWorld class 
    /// </summary> 
    [ProgId("ActiveXClass.HelloWorld")] 
    [ClassInterface(ClassInterfaceType.AutoDual)] 
    [Guid("415D09B9-3C9F-43F4-BB5C-C056263EF270")] 
    [ComVisible(true)] 
    public class HelloWord 
    { 
     [ComVisible(true)] 
     public String SayHello() 
     { 
      return "Hello World!"; 
     } 
    } 
    } 

또한 AssemblyInfo.cs 파일에 [assembly : ComVisible (true)]를 설정했습니다. 그런 다음 ActiveX 클래스의 Object를 만들고 SayHello() 메서드를 호출하는 예제 HTML 페이지를 만들었습니다. 그런 다음 위의 단계에 따라 위의 프로젝트에 대한 msi를 만들었습니다. 새 프로젝트 -> 기타 프로젝트 유형 -> 설치 및 배포 -> Visual Studio Installer -> Setup1이라는 설치 프로젝트를 선택합니다. 다음으로 다음 명령으로 ActiveX 프로젝트를 등록합니다. cmd를에서

regasm /codebase "FULLPATH OF MY ACTIVEX DLL" 

응답은 : "형이 성공적으로 등록합니다." 그런 다음 FileSystem에서 "D : \ ActiveX \ Test.html"과 같은 샘플 HTML 페이지를 만들었습니다. 다음은 샘플 HTML 코드입니다. 참고 : .cab 파일을 만들지 않았습니다.

<!DOCTYPE> 
    <html> 
    <head> 
      <title>ActiveX webpage</title> 
    </head> 
    <body> 

    <OBJECT id="ACtive" classid="clsid:415D09B9-3C9F-43F4-BB5C-C056263EF270"> 
    </OBJECT> 

    <script type="text/javascript"> 
     try { 
      var obj = document.ACtive; 
      if (obj) { 
       alert(obj.SayHello()); 
      } else { 
       alert("Object is not created!"); 
      } 
     } catch (ex) { 
      alert("Some error happens, error message is: " + ex.Description); 
     } 

    </script> 

나는 파일 시스템으로이 페이지 실행 한 (예를 들어, D를 : 액티브 \ test.html를 \)가 메시지를 나타납니다에 "Hello World를 .."성공적으로. 하지만이 HTML 파일을 IIS 서버에 추가하면 해당 메시지를 찾아 볼 때 "일부 오류가 발생합니다. 오류 메시지는 : 정의되지 않음"이라는 메시지가 표시됩니다. 그럼 여기서 뭐가 잘못 됐어 ..? 나는 또한 같은 C# 웹 페이지를 만들었습니다. 그러나 결과는 같습니다. IIS 측 또는 IE 측에서 구성 문제가 있습니까? 나는 이미 많은 것들을 실험했지만 실패했다. 로컬 호스트에서 해당 웹 페이지를 실행하면 localhost:8080/Test.html처럼 실행되지만 IP 주소로 바꾸면 fails.for 예 http://192.168.1.xx:8080/Test.html 이 문제를 해결하십시오. ActiveX 구성 요소가 매우 새로 생겼습니다. 솔루션을 기대합니다.

모든 아이디어가 크게 감사하겠습니다. 도와주세요. 미리 감사드립니다.

+0

IIS가있는 서버에 ActiveX 구성 요소를 설치 했습니까? 인터넷 영역 및 보안 설정을 확인하고자 할 수도 있습니다. 문제의 사이트를 신뢰할 수있는 사이트 영역에 추가하고 이것이 도움이되는지 확인할 수 있습니다. – Sean

+0

답장을 보내 주셔서 감사합니다. 내 웹 사이트를 IE에 신뢰할 수있는 사이트로 추가하고 "초기화 및 스크립트 ActiveX 컨트롤을 스크립팅에 안전하지 않음"으로 설정했습니다. 이것은 나를 위해 작동합니다. –

답변

0

IIS 구성 요소를 IIS 서버에 설치해보십시오.

또한 인터넷 영역 및 보안 설정을 확인하십시오. 특히 해당 사이트를 신뢰할 수있는 사이트 영역에 추가해보십시오.

2

먼저, 당신은 액티브 X를 실행하려는 PC에 관리자 모드로 실행에

테이크 cmd를

유형 cd C:\Windows\Microsoft.Net\Framework\<version of your application> 당신의 DLL을 등록합니다. 예를 들어

당신이 다음 .NET 4 C:\Windows\Microsoft.Net\Framework\v4.0.30319 입력을 사용하는 경우

, 는 regasm <path of your dll>

예를 입력 : C:\Windows\Microsoft.Net\Framework\v4.0.30319> regasm d:\myfile.dll을 입력합니다. 메시지의 끝은 type registered successfully입니다.그렇지 않다면 응용 프로그램의 버전을 확인하십시오.

그런 다음 IE 보안을 확인하십시오. Internet Explorer로 이동하여 도구 -> 인터넷 옵션 -> 고급 탭 -> 보안 탭에서 처음 세 가지 옵션을 확인하십시오. 그런 다음 보안 탭에서 신뢰할 수있는 사이트를 클릭하고 '사이트'버튼을 클릭 한 다음 신뢰할 수있는 사이트 목록에 URL (http://192.168.10.xx/ *) 을 추가 한 다음 맞춤 레벨로 이동하여 Activex 컨트롤 및 플러그인을 찾아 '승인 된 도메인 만 허용 프롬프트없이 ActiveX를 사용하려면 " 그런 다음 IE를 다시 시작하십시오.

관련 문제