2010-07-13 5 views
5

우리는 단지 VS와 /clr:pure 인수방법 .Net DLL로 C 라이브러리를 컴파일하는 방법?

extern "C" { 
#include <library.h> 
} 

과 같은 코드를 포함하는 CPP 프로젝트를 컴파일하여 (모든 C libs와 기능에 포함 개방 액세스) 닷넷 DLL과 C 라이브러리를 컴파일 할 수 있습니까? (VS10)

또는 우리는 더 많은 trickey를해야합니까?

답변

3

이전 스타일 Managed C++를 사용하는 것이 가장 좋습니다.

CLR:PURE 그냥 잘라내지 마십시오.

예 :

extern "C" int _foo(int bar) 
{ 
    return bar; 
} 

namespace Bar 
{ 
    public __gc class Foo 
    { 
    public: 
    Foo() {} 

    static int foo(int bar) 
    { 
     return _foo(bar); 
    } 
    }; 
}; 

컴파일과 :

/clr:oldSyntax 지금 당신이 assebmly를 참조하고, .NET에서 Bar.Foo.foo()를 호출 할 수 있습니다.

+0

당신은 무엇을 의미합니까 - 간단한 samle을 제공합니까? – Rella

+0

@Ole Jak : 예제가 추가되었습니다. – leppie

+0

당신은 '__gc'가 무엇인지에 대해 설명 할 수 있습니까?이 코드는 .net dll로 어떻게 컴파일 될까요? (나는 우리가 그것에 대해 어떻게 생각할 것입니까?) – Rella

3

정말 C 코드에 따라 다릅니다.

P/Invoke는 시작하기가 가장 쉽고 IMO는 몇 가지 기능을 수행하는 데는 매우 유용합니다. 성능이 반드시 좋은 것은 아니며 전체 프로그램을 구성하지는 않겠지 만 일부 기능을 재사용하는 것은 가치가 있습니다. C에서가는

에/CLR : 순수는 당신이 필요합니다

  1. Convert your C code to C++
  2. Convert your C++ code to Visual C++
  3. Compile with /clr option
  4. Compile with /clr:pure

코드의 현재 상태 (그것은이다 도서관)은 그 과정이 얼마나 고통 스러운지를 지시 할 것입니다.

+0

"thay"는 .Net dll을 사용하기 위해 P/Invoke가 필요 없다고 말합니다. "thay"는 VS와 함께 'clr : pure'인수를 사용하여 .Net dll로 C++ (CPP 파일) 코드를 컴파일 할 수 있다고 말합니다. – Rella

+0

@Ole - "They"가 맞습니다. 그것은 당신에게 맞는 것을 줄 가능성이있는 C에서 그 지점에 이릅니다. –

+0

Ole은 그의 다른 (나는 5 개를 잃어 버렸습니다. 아마도 5 개) 질문에 대해 모든 것이 하나의 파일로 컴파일되어야한다는 요구 사항을 설정했습니다. 'DllImport'는 당신을 거기에 데려다주지 않을 것입니다. –

1

C 코드를 약간 변경하지 않고 C 코드로 컴파일 할 수도 있습니다. C 코드를 C++로 컴파일 할 수 있다면 C++/CLI로 컴파일 해 볼 수 있습니다 (clr : pure 옵션의 기능).

이 시점에서 내 보낸 모든 함수를 공용 (관리) 클래스의 정적 메서드로 표시하는 일종의 클래스를 만들 수 있습니다.

C++ 전 처리기 트릭 (매크로 등)을 사용하여 이러한 종류의 항목을 처리 할 수 ​​있으며 때로는 수동으로 래퍼를 작성할 수도 있습니다.

/clr : xxx 옵션을 사용하여 C++을 .NET 어셈블리로 컴파일 할 수있는 기본 정보는 사실이지만 유용한 .NET 어셈블리를 얻는 데 필요한 유일한 방법은 아닙니다.

+0

은 블로그 기사 나 그와 비슷한 sucsess에 대한 단계별 설명이나 이야기가 있습니다. – Rella

4

이 당신에게 관심이있을 수 있습니다 Compiling your C code to .NET

는 C 코드 예컨대 stack.c

1 단계에서 .NET DLL을 만들려면

occil.exe C 컴파일러를 만들기 : 스택을 구축 할 수 있습니다.IL 코드에 c를

occil /ostackdll.il /c /Wd /9 /NStackLib.Stack stack.c 

2 단계 : 구축 생성 된 IL 코드를 .NET으로 DLL 그런

ilasm /DLL stackdll.il 

당신은 참조 교류 # 프로그램에서 stack.dll하고 스택에서 C 함수를 호출 할 수 있습니다 .c

관련 문제