2012-03-05 4 views
1

C# 프로그램에서 리소스로 추가 한 관리되지 않는 C++로 작성된 코드가 있습니다.관리되는 C# 코드에서 관리되지 않는 EXE를 리소스로 포함

Assembly.Load을 사용하여 관리되지 않는 EXE를로드하려고하면 InnerException에 "IL Format is incorrect"(분명히)라는 BadImageFormatException가 표시됩니다.

어떻게하면됩니까?

DLL로 코드를 사용하는 것이 더 좋을지 만, 어떤 이유로 dll 호출은 System.Diagnostics.Process.Start과 함께 관리되지 않는 exe를 실행할 때와 같은 방식으로 동작하지 않습니다.

그리고 두 개의 EXE 파일을 분리하고 싶지는 않습니다. 어떤 생각?


편집 : OK, 나는 더 이상 그렇게 할 필요가있다. 내 dll은 다른 컨텍스트 (콘솔 대신 winform)에서 사용하기 때문에 다른 방식으로 동작합니다. 따라서 문제를 일으키는 기능, SetThreadDesktop, 예상대로 작동하지 않을 수 있습니다. 답변을 얻은 모든 사람들에게 감사드립니다.

+0

이 관리되지 않는 실행 파일을 사용하려고합니까? 그것을 실행? 당신은 임베디드 EXE 파일을 % TEMP % 경로에 저장하고'Process.Start'를 사용하여 파일을 저장해야합니다. 그런 다음'WaitForExit'을 사용하고 EXE를 삭제하여 정리하십시오. – vcsjones

+0

그건 참 좋은 생각이지만, 임베디드 EXE를 생성하지 않고 오히려이 작업을 수행 할 수 있습니다. – GianT971

+2

C++/CLI 컴파일러를 사용하여 C++을 혼합 모드 어셈블리로 컴파일하고 C# 코드와 링크 할 수 있어야합니다 하나의 파일로 –

답변

3

관리되지 않는 exe/dll을 Assembly.Load()과 함께로드 할 수 없으며 관리되지 않는 exe/dll을로드 할 수 없습니다. 해당 관리되지 않는 파일을 PInvoke 할 필요가 있고 단일 exe를 배포하려는 이유가 있다면 (현재 수행 한 것처럼) 포함 된 리소스로 압축하여 대상 컴퓨터에서 파일로 압축을 풀고 다음과 같이 사용할 수 있습니다 보통의.

+0

그래,하지만 어쩌면 누군가 Assembly.Load없이이 작품을 만드는 힌트를 줄 수 있습니다. – GianT971

+0

@ GianT971 당신은 이미 하나의 exe에 포장하려고하기 전에 게임을하려고 가정. Alexei (+1)가 제안한 PInvoke 자습서를 따르십시오. –

+0

내일보세요. – GianT971

2

당신은 자원으로 관리되지 않는 DLL이있는 경우 - 기본 단계 :

런타임
  • 사용을 LoadLibrary (Win32에서 호출 LoadLibrary using PInvoke에)이 라이브러리에서
  • 중 하나를 사용하는 방법에
  • +0

    "실행시 디스크에 리소스 저장"이란 무엇을 의미합니까? 어떻게해야합니까? * – GianT971

    +0

    검색 엔진이 있습니다 :) - http://www.bing.com/search?q=Save+resource+to+disk+at+run-time,하지만 여기에는 하나의 http가 있습니다. : //stackoverflow.com/questions/864140/write-file-from-assembly-resource-stream-to-disk –

    +0

    좋아,이 방법을 사용하면 프로젝트에 dll을 가져 오는 것과 다를 수 있습니다. – GianT971

    관련 문제