2013-10-06 14 views
2

혼란 제목 죄송합니다,앱이 64 비트 인 동안 32 비트 모드에서 코드를 실행할 수 있습니까?

나는 ++ C#을 사용하고 나 C에 writen ++ 후 관리 C에 싸여 지리적 파일을 작업하고 있습니다 DLL을의 무리는 ArcMap의 작업을하기 위해 노력하고있어

의 ArcMap의 버전 내가 근무하는 곳은 32 비트이기 때문에 Dll과 상호 작용할 수있는 유일한 방법은 32 비트 애플리케이션을 개발하는 것이다.

32 비트를 만들거나 (필요한 방식으로 구성 할 수있는) 다른 DLL에있는 클래스를 사용하는 64 비트 응용 프로그램이 있는데 클래스는 ArcMap DLL을로드하고이를 사용하여 읽기를 시도합니다 일부 파일 (모양 파일) ..

문제는 64 비트 응용 프로그램에서 32 비트 클래스를로드 할 수 없다는 것입니다 ... 그리고 Arcmap 객체를 사용하는 클래스를 32 비트에서 64 비트로 변경할 수 없기 때문에 arcmap dll이로드되지 않습니다.

내가 현재 가지고있는 유일한 해결책은 콘솔 프로젝트로 클래스를 변환하고, 32 비트로 실행하고, 콘솔 프로젝트가 txt 파일에 빨간색으로 쓰는 것을 기다릴 때까지 기다리는 것이다. 내 원래 64 비트 응용 프로그램에서.

이것은 내가 가진 가장 힘든 해결 방법이며, 누군가가 나를 더 나은 솔루션을 찾도록 도울 수 있기를 바랍니다. 사전에

감사합니다,

P.S 내 질문의 일부가 불분명 한 경우 무엇을 언급하고 내가 무엇을 의미하는지 설명하려고하겠습니다.

+0

아마 중복 : http://stackoverflow.com/questions/6744284/use-a-32 -bit-assembly-in-64-bit-environment – Nenad

+0

64 비트 응용 프로그램을 32 비트로 변환 할 수 있습니까? 그 외에도 프로세스 간 통신을 대신 사용할 수도 있지만 텍스트 파일로 데이터를 전달하는 것보다 훨씬 좋을 것입니다. – Andre

답변

4

다음과 같은 제약이 있습니다 당신은 32 비트 및 64 비트 코드를 실행할 수 없습니다

  • 을 같은 과정.
  • 타사 코드는 32 비트 모듈로 이진 형식으로 제공됩니다.

이로부터 제 3 자 코드가 32 비트 프로세스에서 실행되어야한다고 결론을 내릴 수 있습니다. 즉, 다음 옵션을 사용할 수 있습니다.

  1. 가능한 경우 프로세스를 32 비트로 변환하십시오. 이것은 가장 쉽고 간편한 솔루션입니다.
  2. 프로세스를 64 비트로 남겨두고 제 3 자 코드를 별도의 프로세스로 실행하십시오.

당신이 질문에 설명하는 추한 솔루션 옵션 2를 구현하지만 그렇게 적은 추한 방법이 할 수있는 한 가지 방법입니다.외부 파일을 사용하여 통신하는 대신 원격 프로 시저 호출 메커니즘 (RPC)을 사용할 수 있습니다.

많은 옵션이 있지만 가장 확실한 것은 COM입니다. out-of-process COM 서버에 32 비트 코드를 넣고 64 비트 응용 프로그램에서이를 소비하십시오. 이렇게하면 메서드 호출을 사용하여 제 3 자 라이브러리와 통신하는 깨끗한 코드를 작성할 수 있습니다. 기본 RPC 메커니즘은 두 프로세스간에 정보를 얻는 것과 관련된 모든 저수준 과도한 작업을 수행합니다.

+0

"out-of-process COM 서버에 32 비트 코드 넣기"- 무슨 뜻인지에 대해 자세히 설명 할 수 있습니까? "com 서버"라고 할 때 무슨 뜻인지 이해할 수 없습니다 – OopsUser

+0

이 생각하지 않습니다. COM에 대해 가르쳐 줄 곳입니다. 확실히 코멘트에 없습니다. COM 서버가 무엇인지 알지 못하면 배경을 약간 읽어야합니다. COM 및 RPC에 대해 잘 모르는 경우에는 약간의 단계가 필요할 수 있습니다. 따라서 앱을 32 비트로 변환하면 더욱 매력적인 솔루션이됩니다. –

+0

나는 "COM 서버"가 "COM 객체"와 같을 때, 그것에 대해 배우는 시간과 의지가 무엇입니까? COM 객체가 C++/C#과 다른 언어 사이의 상호 운용성을 허용한다는 것을 알고 있지만 COM 객체를로드하는 프로세스와 같은 "비트"(64 또는 32)로 실행되도록 동일한 프로세스 내에서 실행되는 것으로 생각했습니다. 관련 기사를 읽으려면 두 가지 링크를 부탁드립니다. 감사합니다. – OopsUser

1

32 비트 응용 프로그램을 만들고 COM/DCOM 또는 다른 종류의 .NET Remoting을 사용하여 64 비트 기본 응용 프로그램과 의논 할 수 있습니다. 따라서 파일을 읽고 쓸 필요가 없습니다. 다른 형태의 IPC (명명 된 파이프, DCE/RPC)를 사용할 수도 있지만 이는 그리 간단하지 않을 수 있습니다.

는 여기에 몇 가지 포인터 참조 :

Is there a viable counterpart to DCOM in .NET?

DCOM server and client both written in .NET

How can a 32 bit process communicate with a 64 bit process in .NET?

0

다음과 같은 구문을 통해 32 비트 응용 프로그램으로 64 비트 응용 프로그램을 변환 할 수 있습니다 CorFlags.exe xxx.exe이며/32BIT +

+1

사실입니다. 그러나 질문자가 64 비트 응용 프로그램에 대한 소스를 가지고 있다면 대상을 변경하고 다시 컴파일하는 것이 더 쉬울까요? 어떤 시점에서 프로그램이 다시 컴파일 될 가능성이 높습니다. –