문제

32 비트에서 64 비트로 마이그레이션하려는 응용 프로그램이 있습니다. .NET이며 X64 플래그를 사용하여 컴파일됩니다. 그러나 Fortran 90에 32 비트를 위해 편집 된 많은 DLL이 있습니다. Fortran DLL의 기능은 상당히 간단합니다. 데이터를 넣고 데이터를 꺼냅니다. 어떤 상태도 없습니다. 우리는 또한 거기에서 많은 시간을 보내지 않고 총 3%의 시간을 보내지 않지만, 그것이 수행하는 계산 로직은 매우 중요합니다.

어떻게 든 64 비트 코드에서 32 비트 DLL을 호출 할 수 있습니까? MSDN은 내가 할 수 없다고 제안합니다. 나는 간단한 해킹을하고 이것을 확인했습니다. 모든 것이 유효하지 않은 진입 점 예외를 던집니다. 지금까지 찾은 유일한 솔루션은 모든 32 비트 DLL 기능에 대한 COM+ 래퍼를 생성하고 64 비트 프로세스에서 COM을 호출하는 것입니다. 이것은 꽤 두통처럼 보입니다. 우리는 또한 와우 에뮬레이션에서 프로세스를 실행할 수 있지만, 메모리 천장은 증가하지 않으며 약 1.6GB로 캡핑됩니다.

64 비트 CLR 프로세스에서 32 비트 DLL을 호출하는 다른 방법이 있습니까?

도움이 되었습니까?

해결책

32 비트 DLL을 별도의 32 비트 프로세스에로드해야하며 64 비트 프로세스가 의사 소통을 통해 이와 통신하도록해야합니다. 32 비트 DLL을 64 비트 프로세스에로드 할 수있는 방법은 없다고 생각합니다.

여기에는 꽤 좋은 기사가 있습니다.

64 비트 코드에서 32 비트 DLL에 액세스합니다

다른 팁

Vista 용 WOW32로로드되도록 32 비트 프로세스 (CPU 또는 X64)로 실행 가능한 프로세스를 32 비트 프로세스 (CPU 또는 X64)로 작성해야합니다. 이렇게하면 32 비트 에뮬레이션 모드에로드되며 진입 점 문제가 없습니다. 라이브러리를 AnyCPU 모드로 남겨 둘 수 있지만 실행 파일은 X86으로 컴파일해야합니다.

기존 DLL을 다시 컴파일하고 싶지 않다면 John의 대답은 정확합니다. 그러나 그것은 당신에게도 옵션 일 수 있습니다.

우리 팀은 현재 X86 Fortran 코드를 X64로 마이그레이션하여 메모리 천장을 늘리고 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top