2011-05-06 5 views
10

나는 C++ 라이브러리 파일 (.lib)을 가지고 있습니다. 어떻게 C#에서 그 함수에 액세스 할 수 있습니까? 라이브러리 파일을 C++ DLL로 래핑하고 그 방법으로 함수를 노출 할 수 있다는 것을 읽었습니다. 그게 유일한 방법인가요? 나는 코드의 소유자가 아니기 때문에 옵션이 제한적이다.C++ .lib 라이브러리에 액세스 C#

답변

6

C++/CLI 어셈블리로 C++ lib를 래핑하십시오.

C++/CLI를 사용하면 관리되는 코드와 관리되지 않는 코드를 혼합하여 C#과 기본 C++ 사이의 다리 역할을 할 수 있습니다. 실제로는 매우 간단하고 상대적으로 쉽게 할 수 있습니다. 그러나 래핑 할 많은 클래스/함수가 있으면 지루할 수 있습니다.

Here이 하나의 예입니다.

+0

감사합니다. 이것은 원래의 C++ 라이브러리를 수정할 수 없기 때문에 제가 사용할 접근법입니다. –

0

C++ 라이브러리 파일 (.lib)에 직접 액세스 할 수 없습니다. 가장 좋은 방법은 관리되지 않는 코드 주위에 관리되지 않는 래퍼를 두는 것입니다. 참조 DllImportAttribute. 당신은 당신의 C++ 라이브러리 주위에 관리되는 C++ 래퍼를 가질 수 있지만, 그것은 관리되지 않는에서 래퍼를 작성하는 것이 좋습니다 :

using System; 
using System.Runtime.InteropServices; 

class Example 
{ 
    // Use DllImport to import the Win32 MessageBox function. 
    [DllImport("user32.dll", CharSet = CharSet.Unicode)] 
    public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type); 

    static void Main() 
    { 
     // Call the MessageBox function using platform invoke. 
     MessageBox(new IntPtr(0), "Hello World!", "Hello Dialog", 0); 
    } 
} 
또한


주의 :

이 그 좋은 예는 MSDN 도움말 문서의 사용이다이다 C++ 코드.

+0

DllImport는 * .lib를 가져올 수 있습니까? 나는 그것을 몰랐다 :) –

+0

그래, 내 대답은 조금 성급했다. 나는 C++을 읽고 즉석에서 컴파일 된 어셈블리를 의미한다고 생각했습니다. 어떤 사람들은 어셈블리와 마찬가지로 용어 라이브러리를 사용하기 때문에 .lib 부분을 놓쳤습니다. –

0

이 cmd를 사용하여 lib를 dll로 변환 할 수 있습니다. script. 그런 다음 DllImport를 사용하여 해당 기능에 액세스 할 수 있습니다. 그러나이 스크립트가 작동하도록하려면 약간 수정해야했습니다.

+0

링크가 더 이상 유효하지 않습니다. – Flynn1179

관련 문제