오늘 D 프로그래밍에 대해 들었고 C 코드와 호환됩니다. 그럼에도 불구하고 D에서 GTK 나 PortAudio와 같은 C 라이브러리를 사용할 수 있는지 여부에 대한 정보는 찾지 못했습니까? 가능한 경우이 작업을 수행하는 방법을 설명해 주시겠습니까?D에서 C 라이브러리를 사용하는 방법은 무엇입니까?
답변
D에서 C 라이브러리를 호출 할 수 있습니다. C 헤더 파일을 D로 변환해야합니다. 대부분의 경우이 방법은 매우 간단하며 도움을주기는 어렵습니다. command-line tool 프로세스를 자동화하십시오. 그것은 장난감 예제와 관련해서는 절대로 실제로 작동하지 않지만 수행해야 할 변형의 종류를 확인하는 것은 좋은 출발이 될 수 있습니다. 머리글로 번역하는 데 어려움을 겪고있는 코드 조각을 넣고 htod가 그 코드로 수행하는 작업을 확인하십시오.
대개 발생하는 가장 큰 문제는 C 전처리 기의 창의적인 사용입니다. 어떤 것은 D에서 version() 문으로 바뀔 수 있지만 전부는 아닙니다.
실제로 코드를 컴파일하고 링크하는 방법은 유닉스 계열 플랫폼에서 GCC를 사용하여 C 코드로 컴파일하고 링크 할 수 있다고 생각합니다. Windows에서 DMC를 사용하여 C 파일을 컴파일하고 DMD와 링크해야합니다. 또는 C 코드를 컴파일 할 수있는 컴파일러를 사용하여 DLL로 컴파일 한 다음 DMD와 연결하여 DLL에서 DMD 호환 가져 오기 라이브러리를 만들어야합니다. 이것은 DigitalMars에서 구할 수있는 무료 Basic Utilities Package에있는 implib 도구를 사용하여 수행 할 수 있습니다.
이미 많은 헤더 번역이 수행되었습니다. 먼저 Dsource의 Bindings 프로젝트를 검색하거나 GTK 헤더를 번역하는 것과 같은 큰 일을하기 전에 digitalmars D 뉴스 그룹에 먼저 문의하는 것이 유용합니다.
D 코드는 C 개체 파일과 연결될 수 있으며 C DLL과 상호 작용할 수 있지만 사용할 C 헤더 파일에서 D 모듈을 생성해야합니다. 공식 D 웹 사이트는 바로 그 일을하기 위해 a guide입니다.
이 http://dsource.org 에서보세요 당신은 당신은 C 바인딩을 작성해야
시작 얻을 도움이 될 많은 프로젝트가 있습니다 : GTK 같은 인기있는 라이브러리의 많은 이미 (GTKD 예를 들어, 여기에) 포장되었다. This answer 설명 방법.
인기있는 대안은 런타임 중에 라이브러리를로드하는 것입니다.
module libpngtest;
import std.stdio;
import core.sys.posix.dlfcn;
alias uint function() png_access_version_number_t;
int main() {
auto lib = dlopen("libpng.so".ptr, RTLD_LAZY | RTLD_LOCAL);
if (lib is null) {
writeln("EEEK!");
writeln(to!string(dlerror()));
return -1;
} else {
writeln("WOOT!");
auto png_access_version_number = cast(png_access_version_number_t)dlsym(lib, "png_access_version_number");
writeln(png_access_version_number());
}
if (dlclose(lib) == 0) {
return 0;
} else {
return -1;
}
} // main() function
// compile: dmd libpngtest.d -L-ldl
// run: ./libpngtest
을 테스트 할 DPaste를 사용 : http://www.dpaste.dzfl.pl/917bc3fb
을 여기의 libpng 기능의 libpng를로드하고 호출하는 방법을 예입니다- 1. SQLSERVERSMO 용 com 라이브러리를 사용하는 방법은 무엇입니까?
- 2. D에서 키보드 입력을 얻는 방법은 무엇입니까?
- 3. D에서 C 문자열을 어떻게 처리해야합니까?
- 4. Android 프로젝트에 라이브러리를 연결하고 사용하는 방법은 무엇입니까?
- 5. Windows exe가 사용하는 라이브러리를 찾는 방법은 무엇입니까?
- 6. DevC++에서 pthread 라이브러리를 사용하는 방법은 무엇입니까?
- 7. ZEND FRAMEWORK의 클래스 라이브러리를 사용하는 방법은 무엇입니까?
- 8. D에서 빈 문자열을 전달하는 방법은 무엇입니까? (gtkD에)
- 9. MinGW 라이브러리를 사용하는 Intel C/C++ 링커
- 10. 필요한 C 런타임 라이브러리를 생략하는 타사 라이브러리를 수정하는 방법은 무엇입니까?
- 11. ColdFusion에서 C# 라이브러리를 참조하는 방법은 무엇입니까?
- 12. Xcode에서 타사 C 라이브러리를 컴파일하는 방법은 무엇입니까?
- 13. C# ClassLibrary의 라이브러리를 정적으로 링크하는 방법은 무엇입니까?
- 14. MinGW에서 C 라이브러리를 설치하는 방법은 무엇입니까?
- 15. 여러 C/C++ 라이브러리를 하나로 결합하는 방법은 무엇입니까?
- 16. 중간 라이브러리를 만드는 방법은 무엇입니까?
- 17. Windows Phone 7에서 rsa 라이브러리를 사용하는 방법은 무엇입니까?
- 18. D에서 클래스 모니터 란 무엇입니까?
- 19. '\는 무엇입니까?' D에서 이스케이프 시퀀스?
- 20. D에서 사용자 정의 유형을 고유하게 식별하는 방법은 무엇입니까?
- 21. xcode에서 표준 C++ 라이브러리를 사용하는 방법?
- 22. PCRE 라이브러리를 사용하는 C 응용 프로그램 배포
- 23. 여러 응용 프로그램에서 공유 라이브러리를 사용하는 가장 좋은 방법은 무엇입니까?
- 24. 최소한의 성능 저하로 C & C++ 라이브러리를 동기화하는 방법은 무엇입니까?
- 25. QT 라이브러리를 사용하는 C++에서이 코드 줄에 해당하는 것은 무엇입니까?
- 26. 부스트에서 라이브러리를 만드는 방법은 무엇입니까?
- 27. D에서 CPU 아키텍처 결정
- 28. D에서 Y- 연결자?
- 29. android 앱에서 사용자가 만든 라이브러리를 사용하는 방법은 무엇입니까?
- 30. Django와 FeinCMS : 다른 일반 모델에서 미디어 라이브러리를 사용하는 방법은 무엇입니까?