2017-10-16 7 views
0

요구 : 파이썬 프로젝트로 (화상 비교 Emgu.CV.World.dll를 사용)는 C# 1 DLL을로드 일부 파라미터를 DLL 내부의 함수를 호출 .86 플랫폼 emgu 이력서 사용시 DLL cvextern를로드 할 수

이미지 비교를 위해 Emgu.CV.World.dll이라는 DLL을 내보내려고했습니다. "모든 CPU"대상에 대해 컴파일하는 동안 DLL 내보내기가 작동하지 않습니다.

mydll = ctypes.cdll.LoadLibrary(self.libPath) 

을하지만 DLL 내부에 함수를 호출하는 동안 : 후 x86 플랫폼으로 변경, DLL은 파이썬에서 제대로로드

WindowsError: [Error -532462766] Windows Error 0xE0434352 
:

ImageContentComparisonResult = mydll.CompareImageContent(self.OutputFile, self.OriginalFile) 

는 다음과 같은 예외를 throw

Visual Studio에서 출력 :

A first chance exception of type 'System.IO.FileNotFoundException' occurred in Unknown Module. 

이 후, 샘플 Emgu.CV 프로젝트 (GUI)를 만든 같은 예외를 얻었다. 이 내가 Emgu.CV에 "빈 \ 86 \ 디버그"의 x86 및 x64 DLL을 복사 한 후

{"The type initializer for 'Emgu.CV.CvInvoke' threw an exception."} 
InnerException: {"Unable to load DLL 'cvextern': The specified module could not be found. (Exception from HRESULT: 0x8007007E)"} 

같은 예외 사항을 가지고, 그것은 샘플 앱 작동했지만 비 GUI에 대한 C# 프로젝트는 필요한 DLL을 복사 한 후에도 작동하지 않습니다.

+0

1) 프로세스에 _.dll_을로드 할 때 아키텍처가 일치해야합니다 (_Python_ 아키텍처가 시작 직후 첫 번째 프롬프트 라인에 표시됨). 따라서 _x86_ 및 _amd64_ 버전을 모두 필요로하지 않습니다. 2) 나는 한번도 시도한 적이 없지만 _C_ _ 인터페이스를 가지고 있고 _C_ 응용 프로그램에서 사용할 수있는 경우를 제외하고는 _C_ _ _.dll_을 _ctypes_를 사용하여 처리 할 수 ​​없다고 확신합니다. 또한 전체 코드뿐만 아니라 조각을 게시 도움이 될 것입니다. 마지막 오류와 관련하여 _cvextern.dll_ (** !!! 또는 일부 종속성 !!! **)을 찾을 수 없습니다. – CristiFati

답변

0

복사 내 IS에, \ libs와 \ 64에서 libs가 : C : \ Emgu \ emgucv-windesktop_x64 - CUDA 3.3.0.2826 \ libs와 \ 64

0

C# DLL이하는 ctypes를 사용하여로드되지 않습니다. python 패키지에 포함 된 clr.AddReference 메서드를 사용해야합니다. Python 2.7이 2.7 설치의 일부로 제공되는 clr 패키지를 제거해야하는 경우 (네임 스페이스 충돌을 피하기 위해). 또는 IronPython도 같은 용도로 사용할 수 있습니다.