2010-08-22 2 views

답변

10

예 가능합니다. 사실 이것은 dmd의 주요 기능 중 하나입니다. C에서 D 함수를 호출하려면 해당 함수를 extern(C)으로 지정하십시오.

// .c 
#include <stdio.h> 
extern int x; 
void increaseX(void); 

int main (void) { 
    printf("x = %d (should be 0)\n", x); 
    increaseX(); 
    printf("x = %d (should be 1)\n", x); 
    return 0; 
} 

// .d 
import std.c.stdio; 
extern (C) { 
    shared int x; // Globals without 'shared' are thread-local in D2. 
        // You don't need shared in D1. 
    void increaseX() { 
    ++ x; 
    printf("Called in D code\n"); // for some reason, writeln crashes on Mac OS X. 
    } 
} 

더 많은 정보를 원하시면 Interfacing to C를 참조하십시오.

+1

+1 정확하게 올바른 페이지로 이동하십시오. C 코드와 D 코드는 별도의 파일에 있어야합니다. (분명히 들릴지 모르겠지만 명시 적으로 명시해야합니다.) –

1

위의 대답은 내가 아는 한 잘못되었습니다. D 함수를 사용하기 전에 D 주 루틴을 호출해야하기 때문에. 이것은 D를 "초기화"하는 데 필요합니다. 가비지 수집. 이를 해결하기 위해 D의 주 루틴에 의해 프로그램을 입력하거나 C의 D 메인 루틴을 호출 할 수 있습니다 (그러나이 방법이 어떻게 작동하는지 정확히 알지 못합니다)

+1

다음은 2007 년 토론 내용입니다. http://www.digitalmars.com/d/archives/digitalmars/D/learn/Calling_D_from_C_-_What_s_the_present_status_6003.html –

관련 문제