우리는 단지 VS와 /clr:pure
인수방법 .Net DLL로 C 라이브러리를 컴파일하는 방법?
extern "C" {
#include <library.h>
}
과 같은 코드를 포함하는 CPP 프로젝트를 컴파일하여 (모든 C libs와 기능에 포함 개방 액세스) 닷넷 DLL과 C 라이브러리를 컴파일 할 수 있습니까? (VS10)
또는 우리는 더 많은 trickey를해야합니까?
우리는 단지 VS와 /clr:pure
인수방법 .Net DLL로 C 라이브러리를 컴파일하는 방법?
extern "C" {
#include <library.h>
}
과 같은 코드를 포함하는 CPP 프로젝트를 컴파일하여 (모든 C libs와 기능에 포함 개방 액세스) 닷넷 DLL과 C 라이브러리를 컴파일 할 수 있습니까? (VS10)
또는 우리는 더 많은 trickey를해야합니까?
이전 스타일 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()
를 호출 할 수 있습니다.
정말 C 코드에 따라 다릅니다.
P/Invoke는 시작하기가 가장 쉽고 IMO는 몇 가지 기능을 수행하는 데는 매우 유용합니다. 성능이 반드시 좋은 것은 아니며 전체 프로그램을 구성하지는 않겠지 만 일부 기능을 재사용하는 것은 가치가 있습니다. C에서가는
에/CLR : 순수는 당신이 필요합니다
코드의 현재 상태 (그것은이다 도서관)은 그 과정이 얼마나 고통 스러운지를 지시 할 것입니다.
"thay"는 .Net dll을 사용하기 위해 P/Invoke가 필요 없다고 말합니다. "thay"는 VS와 함께 'clr : pure'인수를 사용하여 .Net dll로 C++ (CPP 파일) 코드를 컴파일 할 수 있다고 말합니다. – Rella
@Ole - "They"가 맞습니다. 그것은 당신에게 맞는 것을 줄 가능성이있는 C에서 그 지점에 이릅니다. –
Ole은 그의 다른 (나는 5 개를 잃어 버렸습니다. 아마도 5 개) 질문에 대해 모든 것이 하나의 파일로 컴파일되어야한다는 요구 사항을 설정했습니다. 'DllImport'는 당신을 거기에 데려다주지 않을 것입니다. –
C 코드를 약간 변경하지 않고 C 코드로 컴파일 할 수도 있습니다. C 코드를 C++로 컴파일 할 수 있다면 C++/CLI로 컴파일 해 볼 수 있습니다 (clr : pure 옵션의 기능).
이 시점에서 내 보낸 모든 함수를 공용 (관리) 클래스의 정적 메서드로 표시하는 일종의 클래스를 만들 수 있습니다.
C++ 전 처리기 트릭 (매크로 등)을 사용하여 이러한 종류의 항목을 처리 할 수 있으며 때로는 수동으로 래퍼를 작성할 수도 있습니다.
/clr : xxx 옵션을 사용하여 C++을 .NET 어셈블리로 컴파일 할 수있는 기본 정보는 사실이지만 유용한 .NET 어셈블리를 얻는 데 필요한 유일한 방법은 아닙니다.
은 블로그 기사 나 그와 비슷한 sucsess에 대한 단계별 설명이나 이야기가 있습니다. – Rella
이 당신에게 관심이있을 수 있습니다 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
당신은 무엇을 의미합니까 - 간단한 samle을 제공합니까? – Rella
@Ole Jak : 예제가 추가되었습니다. – leppie
당신은 '__gc'가 무엇인지에 대해 설명 할 수 있습니까?이 코드는 .net dll로 어떻게 컴파일 될까요? (나는 우리가 그것에 대해 어떻게 생각할 것입니까?) – Rella