2016-10-08 3 views
0

작동하는 C++ 응용 프로그램의 이진 데이터가 있습니다. 내 C# 응용 프로그램에서 해당 특정 이진 코드를 직접 실행하고 싶습니다.C# 응용 프로그램에서 C++ 이진 코드를 실행하는 방법

는 내가 인터넷에서 가져온이 기능이 있습니다

static void MemExe(byte[] buffer) 
    { 
     Assembly asm = Assembly.Load(buffer); 

     if (asm.EntryPoint == null) 
      throw new ApplicationException("No entry point found!"); 

     MethodInfo ePoint = asm.EntryPoint; 
     object ins = asm.CreateInstance(ePoint.Name); 
     ePoint.Invoke(ins, null); 
    } 

이가 C#을 바이너리 코드와 잘 작동을하지만, 나는 C++ 바이너리 코드를 열려고하면이 충돌합니다.

바로 여기에 예외 :

추가 정보 : 또는 해당 종속성 중 하나 ', PublicKeyToken = null의 문화 = 중립, 5,154,816 바이트로드 테스트, 버전 = 1.0.0.0'파일 또는 어셈블리를로드 할 수 없습니다. 잘못된 형식의 프로그램을로드하려고 시도했습니다.

헤더와 관련된 것이 있습니까? 나는

이 같은 방법으로 그 기능 메 멕스 실행 C#을 바이너리에 C++ 바이너리를 실행할 수 있습니다 ... 전문가는 생각하지?

감사합니다.

+1

'assembly.Load()'메소드 또는 오버로드가 관리되지 않는 라이브러리 (예 : C/C++ dll)를로드 할 수 없습니다. C#의 _interoperability_ 기능 (예 :'DllImportAttribtute')을 사용해야합니다. 자세한 내용은 Google for C/C++ 상호 운용성/pinvoke를 참조하십시오. –

+0

[질문] (https://stackoverflow.com/questions/991383/call-a-c-function-from-c-sharp) 도움이 될 수 있습니다. –

+0

@ f.nasim 감사합니다. 하지만 그 질문에 나는 사용자가 DLL 자체 내에있는 함수를 실행하려고한다고 생각한다. 나는 그것을 원하지 않는다. C++로 작성된 전체 응용 프로그램을 가지고 있지만 이진 코드에서 직접 실행하고 싶습니다. – bruxo00

답변

0

Assembly.Load(...)은 .NET 바이너리 만로드합니다.

.NET 이외의 다른 바이너리 API에 액세스하려면 P/Invoke 서명을 사용하는 것이 좋습니다.

실행 파일을 실행하려면 System.Diagnostics.Process.Start(...)을 사용하십시오.

관련 문제