문제

C/C ++로 작성된 관리되지 않은 32 비트 라이브러리를 사용하는 C# (.NET 3.5, VS2005 Professional) 응용 프로그램이 있습니다. 내가 사용하는 API는 다음과 같습니다.

void * 초기화 (int x);

voic getData (void *);

그리고 이것은 Windows XP 32bit에서 실행할 때 작동하지만 Windows XP64 비트에서는 예외가 발생합니다.

처리되지 않은 예외 : System.reflection.targetInvocationException : 호출 대상에 의해 예외가 발생했습니다. ---> System.BadimageFormateXception : 잘못된 형식의 프로그램을로드하려고 시도했습니다. (hresult : 0x8007000b의 예외) aktuelizator.commonlibrary.initializeringbuffer (int32 dim)에서 aktuelizator.aktuelizatorwservice.aktuelizatorws..ctor ()

이 관리되지 않은 DLL은 C/C ++의 32bit Unmanages Application에서 호출했을 때 64 비트 XP에 따라 작동합니다.

누구든지 아이디어가 있습니까?

도움이 되었습니까?

해결책

빌드 구성 플랫폼은 '모든 CPU'로 설정되어 있습니다. 즉, 64 비트 OS에서 64 비트로 실행되며 DLL을로드 할 수 없습니다. 대신 x86으로 설정하면 OS에 관계없이 32 비트로 실행되면 DLL이 잘로드됩니다.

다른 팁

DLL이 32 비트로만 컴파일되는 것처럼 들리지만 32 비트 및 64 비트 프로세스에서 호출하려고합니다. 전자는 물론 효과가있을 것입니다. 그러나 나중에는 그렇지 않습니다. 32 비트 DLL은 32 비트 프로세스에서만 사용할 수 있습니다. DLL을 64 비트 대상으로 컴파일하고 C# 앱이 해당 제품을 사용하도록하십시오.

int32로 정의 된 모든 매개 변수를 확인하십시오. 실제로 intptr이어야합니다.

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