PHP가 COM 구성요소를 호출할 수 없으면 어떻게 해야 합니까?

藏色散人
풀어 주다: 2023-03-17 10:50:01
원래의
2222명이 탐색했습니다.

php가 com 구성 요소를 호출할 수 없는 문제에 대한 해결 방법: 1. php 버전과 필요한 시스템 도구를 확인합니다. 2. php.ini를 구성하고 "com.allow_dcom = true"를 활성화합니다. "php_com_dotnet.dll"이 성공적으로 로드되었는지 확인하세요.

PHP가 COM 구성요소를 호출할 수 없으면 어떻게 해야 합니까?

이 튜토리얼의 운영 환경: Windows 7 시스템, PHP 버전 8.1, Dell G3 컴퓨터.

php가 com 구성 요소를 호출할 수 없으면 어떻게 해야 하나요? PHP 참조 COM 구성 요소 함정 기록

최근 작업 항목에 "gig job"이 나타났습니다. 기존 PHP 프로젝트에 기능을 추가해야 하며 해당 기능을 구현하는 데 필요한 프로젝트와 소스 코드 프로젝트도 있습니다. 이 책은 아주 쉬운 일이다. 나는 PHP를 거의 사용하지 않지만 이것이 가장 중요한 "제한 요소"는 아니지만, 함수 라이브러리가 .NET 프레임워크를 사용하여 구현된다는 점이 상대적으로 복잡합니다. 함수형 논리 매뉴얼이 아니기 때문에 PHP에서 복사하기가 어렵습니다. 따라서 .NET의 동적 라이브러리를 PHP에서 직접 참조하는 것이 "과제"를 완료하는 열쇠가 되었습니다

인터넷의 많은 선배들이 이 문제를 기록했지만 복사에 실패했습니다. 일", 피트 레코드를 만나 채우다

COM 구성 요소 동적 라이브러리 생성

COM 구성 요소(COM 구성 요소)는 Microsoft에서 개발한 소프트웨어 개발 기술입니다. 그 본질은 응용 프로그램, 운영 체제 및 기타 구성 요소에 서비스를 제공할 수 있는 작은 바이너리 실행 프로그램입니다. PHP에서 타사 동적 라이브러리를 참조하려면 새로운 COM("Component.class") 메서드를 사용해야 합니다. 구성 요소는 COM 구성 요소여야 합니다

1 Windows 클래스 라이브러리 프로젝트를 빌드하세요

. 어떤 프레임워크 버전이든 Windows 탭에서 클래스 라이브러리 프로젝트를 찾을 수 있어야 합니다

이렇게 하면 프로젝트에 기본적으로 필요한 정보를 기록하는 PropertiesAssemblyInfo.cs 파일이 프로젝트에 있게 됩니다. 프로젝트 세트

2. 대상 프레임워크가 일치해야 합니다

프로젝트 생성 이때 프레임워크를 선택할 수 있습니다

나중에 조정하는 경우 프로젝트 속성 > 응용 프로그램에서 대상 프레임워크에서 수정할 수 있습니다

참고 나중에 dll을 등록할 때 프레임워크가 일관되어야 한다는 점

3. COM 구성 요소를 설정하는 것을 볼 수 있습니다

PropertiesAssemblyInfo.cs 파일에서 ComVisible을 다음과 같이 수정합니다

[assembly: ComVisible(true)]
로그인 후 복사

4. name key

Project Properties> 서명에서 "어셈블리 서명"을 선택하고 동시에 "강력한 이름 키 파일 선택"에서 새 키 파일을 생성한 다음 해당 dll 파일을 생성합니다. binDebug 디렉터리

5. 내장할 수 없는 동적 라이브러리가 있는 경우

프로젝트 Framework 버전이 낮거나,

참조된 라이브러리에 상호 운용성에 필요한 기능이 부족합니다.

즉, 참조된 라이브러리를 사용할 수 없습니다.

그러면 종속 DLL도 후속 등록 및 기타 작업을 수행해야 합니다.

DLL을 서버에 등록합니다.

관련 시스템 수준 작업에는 많은 함정이 있습니다...

1. PHP 버전 확인

개인적으로 테스트한 버전 5.3.22는 없고 5.4.5 버전도 있으니 5.4 이상 버전을 사용해 보세요

이제 최고 PHP 버전은 8.0인데, 잘 모르겠네요. 작동 방법은 여전히 ​​같습니다

2. 필요한 시스템 도구를 확인하세요

gacutil과 regasm 두 가지 도구가 필요하며 둘 다 Framework 버전과 일치해야 합니다

즉, 생성된 COM 구성 요소의 dll이 사용됩니다. 어떤 버전의 프레임워크인지 여기에서 해당 버전의 도구를 사용해야 합니다

일반적으로 Windows 시스템에는 반드시 regasm 도구가 내장되어 있습니다

디렉터리 경로는

C:\Windows\Microsoft.NET\Framework64\v2.0.50727\RegAsm.exe
로그인 후 복사

입니다. 64비트 시스템, Framework64 디렉터리. 그렇지 않으면 Framework 디렉터리를 사용하고 RegAsm.exe 파일을 찾을 수 있는 Framework 프레임워크에 해당하는 버전 번호를 선택합니다. gacutil 도구는 창에 포함되어 있습니다. SDK가 설치되어 있지 않은 경우 공식 웹사이트에서 클릭하여 다운로드할 수 있습니다. 기본 설치 후 Frameworkd 버전 4.0 이하의 도구 경로는

C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\gacutil.exe
로그인 후 복사

버전 4.0이 필요한 경우 경로는 다음과 같습니다.

c:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\NETFX 4.0 Tools\gacutil.exe
로그인 후 복사

3. php.ini

를 구성하고 com.allow_dcom = true를 켜세요

extension_dir 디렉터리에 php_com_dotnet이 있는지 확인하세요

extension=php_com_dotnet.dll을 열거나 추가하세요

4. DLL

64비트 시스템 버전 4.0 my.dll을 예로 들어보겠습니다.

첫 번째 파티에서 생성된 dll을 c:Program FilesMicrosoft SDKsWindowsv7.1BinNETFX 4.0 Tools

c:Program FilesMicrosoft SDKsWindowsv7 디렉터리로 이동합니다. 1BinNETFX 4.0 도구 및 gacutil /i my.dll 실행

C:WindowsMicrosoft.NETFramework64v4.0.30319 디렉터리로 이동하여 regasm my.dll

을 실행합니다.

5. DLL 등록 취소

64비트 시스템 버전 4.0 my.dll 가져오기 예를 들어

C:WindowsMicrosoft.NETFramework64v4.0.30319 디렉터리로 이동하여 regasm my.dll /unregister

c:Program FilesMicrosoft SDKsWindowsv7.1BinNETFX 4.0 디렉터리로 이동하여 도구 아래에서 gacutil /u my

php를 실행하여 COM 구성요소를 호출하세요

위 내용이 올바르게 구성되면 php 파일에서 호출할 수 있습니다.

$comClass = new COM('namespace.className');
$comClass -> methodName();
로그인 후 복사

에서 COM 메소드가 없다는 메시지가 표시되면 해당 내용을 고려해야 합니다. php의 com 기능이 활성화되었는지 또는 php_com_dotnet.dll이 성공적으로 로드되었는지 여부를 확인하세요

호출된 dll 메서드가 없거나 dll이 등록되지 않았다는 메시지가 표시되면 dll 파일이 성공적으로 등록되었는지 여부를 고려해야 합니다.

권장 학습: "PHP 비디오 튜토리얼"

위 내용은 PHP가 COM 구성요소를 호출할 수 없으면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿