2012-04-17 3 views
0

C# 응용 프로그램을 만들었습니다. 이 응용 프로그램 내에서 다른 프로젝트에서 C++ API를 사용/실행하고 싶습니다. API는 매크로 코딩으로 작성되었습니다. 해당 C++ 프로젝트의 dll 가져 오기를 시도하고 해당 API에 속한 함수를 호출하려고했습니다. 문제는 "메소드를 찾을 수 없습니다"오류가 발생한다는 것입니다.C++ dll을 다른 C# 프로젝트로 가져와 사용/실행하는 방법은 무엇입니까?

C# 프로젝트에서 C++ 프로젝트를 어떻게 실행합니까?

+0

http://msdn.microsoft.com/en-us/library/aa288468(v=vs.71).aspx – svinja

+1

[C#에서 C# API 사용] (http://stackoverflow.com/questions)/1689957/using-c-api-in-c-sharp)와 아마 다른 사람들의 톤 (이것은 단지 "관련"질문 목록에 나타났습니다) msvcrt.dll의 –

답변

2

. 3 가지 기본 옵션이 있습니다 :

  1. p/invoke를 통해 원시 기능을 사용할 수있게하십시오.
  2. COM을 통해 기본 코드를 노출합니다.
  3. 네이티브 코드를 관리되는 C++ 어셈블리로 컴파일하십시오.

심각한 코드의 경우 옵션 3은 가장 생산적이고 효과적인 접근 방법입니다.

1

"실행"으로, 별도의 프로세스를 의미하는 경우 :

를 사용하여 .NET에서 System.Diagnostics.Process 사용할 수있는 클래스 : 그렇지

myProcess.StartInfo.FileName = "notepad.exe"; 
myProcess.StartInfo.CreateNoWindow = false; 
myProcess.Start(); 

당신이 C++로 개발 된 DLL을 사용하는 것을 의미하는 경우, 당신이 할 수있는 Platform Invoke Services 사용 : 당신은 관리 프로젝트에 대한 참조로 네이티브 DLL을 추가 할 수 없습니다

using System; 
using System.Runtime.InteropServices; 

class PlatformInvokeTest 
{ 
    //First param is of course either in your PATH, or an absolute path: 
    [DllImport("msvcrt.dll", EntryPoint="puts", CallingConvention=CallingConvention.Cdecl)] 
    public static extern int PutString(string c); 
    [DllImport("msvcrt.dll", CallingConvention=CallingConvention.Cdecl)] 
    internal static extern int _flushall(); 

    public static void Main() 
    { 
     PutString("Test"); 
     _flushall(); 
    } 
} 
+2

함수는 cdecl 호출 규칙을 사용합니다 –

+0

그리고 그건 부적절합니다 내보기에. 내가 아는 한 그는 어셈블리가 아니라 C#으로 작업하고 있다고 말할 수 있습니다. –

+0

아니요, 관련성이 있습니다. DllImport 특성에 CallingConvention = CallingConvention.Cdecl이 추가되어 있어야합니다. –

관련 문제