2010-05-20 3 views
7

내 C 코드를 dll로 컴파일 한 다음 P/Invoke를 사용하여 해당 코드를 호출 할 수 있음을 알고 있습니다. 하나 개의 클래스에 아마에만 사용할 수 있습니다 내 코드에서 직접 임베디드 C 코드의 덩어리를 가질 수 있다면 나는 궁금 무엇C# 프로젝트에 C 코드를 포함시킬 수 있습니까?

...

이 (비 작동) 예와 같이

뭔가 :

public class MyClass { 
    extern "C" { 
     int do_something_in_c(int i) { 
      return i*2; 
     } 
    } 

    public int DoSomething(int value) { 
     return do_something_in_c(value); 
    } 
} 

저는 Visual Studio 2008을 사용하여 몇 시간 동안 노력했지만 아무데도 가지 않고있어 실제로 가능하지 않다고 생각합니다. 누구든지 이것을 확인하거나 거부 할 수 있습니까?

감사합니다.

답변

9

혼합 모드 어셈블리 (관리되는 코드와 네이티브 코드가 모두있는 코드)는 만들 수 있지만 C++/CLI 컴파일러는이 중 하나를 생성 할 수 있습니다. C# 컴파일러에서는 지원하지 않습니다.

3

불가능합니다. C#은 unsafe code (포인터)을 지원하지만 C 또는 C++과 역 호환되지 않습니다.

0

IMHO는 안전하지 않고 관리되지 않는 언어이기 때문에 불가능합니다. 게다가, C#에는 포인터를 제외하고 C의 모든 중요한 기능이 있습니다.

+1

C#을 지원 포인터를 않습니다 - http://msdn.microsoft.com/ en-us/library/aa664769 (v = VS.71) .aspx –

+0

내 나쁜 ..하지만 안전하지 않기 때문에 나는 그것을 고려하지 않았다. – Salil

2

작성하고 정상 (non-.NET) 어셈블리로 C 코드를 컴파일 할 수 있습니다, 다음 P는/그것을 호출 :

[DllImport ("mylib.dll")] 
private static extern int do_something_in_c(int i); 

public int DoSomething(int value) 
{ 
    return do_something_in_c(value); 
} 
+1

OP는 질문의 첫 번째 줄에서이를 언급합니다. –

+0

예. 나는 원래 이것을했다. 그러나 그것은 어떻게 든 비위적인 것처럼 보였다. :) – Jonathan

관련 문제