2010-11-25 7 views
3

Windows XP에서 Delphi (D7 및 D2006)로 프로그래밍 (가까운 미래에 Windows 7로 마이그레이션). 나는 내가하고있는 작업 중 일부와 수학 라이브러리 (현재 Mathematica쪽으로 기울어 져있다)에 대해 수학 라이브러리를 사용할 필요가있다. 나는 보았을 때 컴파일 된 C 코드를 생성 할 것이다. 이러한 코드는 내 메인 프로그램에 특정 기능을 제공합니다.여러 개발 언어를 사용하는 방법

저는이 기본 설정에 대해 매우 기본적인 질문을 가지고 있습니다. 어떻게 Delphi에서 컴파일 된 C 코드를 활용할 수 있습니까? 나는 그 과정에서 나를 시작하기 위해 정말로 아기 단계가 필요하다.

+0

** Mathematica **를 사용하여 C 코드를 생성 하시겠습니까? –

+0

@ 벨리 다리우스 예. –

+0

@Chris 답변 해 주셔서 감사합니다. 매쓰 매 티카에서 C로 변환하기위한 변환 소프트웨어/기능에 대한 포인터를 게시 해주십시오. –

답변

4

내 FE 제품 OrcaFlex으로이 작업을 수행했습니다. Delphi의 C 코드 (정적 또는 동적)에 연결할 수있는 두 가지 옵션이 있습니다. 분산 및 버전 관리가 훨씬 쉬워지기 때문에 정적으로 링크합니다. 그러나 정적으로 작업하는 것은 정말 대단한 일이며 델파이의 많은 문서화되지 않은 측면에 의존해야합니다.

필자는 동적 연결이 가장 필요하다고 생각합니다. 기본적으로 C 코드를 컴파일하고 DLL에 링크해야합니다. Borland C 컴파일러를 사용하여이 작업을 수행하는 것이 좋습니다. 이렇게하려면 무료 명령 행 버전 BCC55를 사용할 수 있습니다. 볼랜드 C를 사용하면 델파이처럼 8087 부동 소수점 유닛에 대해 동일한 가정을 할 수 있다는 장점이 있습니다. MSVC로 빌드하면 MS는 부동 소수점 예외를 발생시키지 않기로 결정했습니다. 볼랜드 C는 부동 소수점 예외를 발생시킵니다. 이것은 다소 복잡한 경우이지만, 견고해야 할 제품을 선적하려는 경우 관련성이 있습니다.

기본적으로 C 코드는 C 호출 규칙을 사용한다는 것을 알고 있어야하며 그저 붙어 있습니다. 외부 루틴을 cdecl 호출 규칙으로 선언하여이를 Delphi로 가져옵니다.

다른 두 가지 사항은 두 모듈 사이에 명확한 인터페이스를 정의하는 것입니다. 예외가 모듈 경계를 넘지 않으며 경계를 넘어 특별한 유형 (예 : Delphi 문자열)을 전달하지 않아야합니다. 따라서 문자열의 경우 PChar (또는 더 나은 PAnsiChar 또는 PWideChar를 사용하여 Delphi 2009 이상으로 업그레이드 할 때 의미를 변경하지 않아야 함)를 사용하십시오.

2

현재 Mathematica가 설치되어 있다면 설명서 센터로 가서 guide/CLanguageInterface을 찾아보십시오. 그렇지 않은 경우 가이드는 available on the web이며 잘 읽었습니다.

완전한 기능이 필요한 경우 Mathematica가 MathLink를 통해 Mathematica 엔진과 연결되는 C 프로그램을 생성하거나 저수준 기능 만 필요할 경우 정적으로 링크 할 수있는 코드를 생성 할 수 있다는 것을 이해합니다. 컴파일 된 매스 매 티카 (Mathematica) 라이브러리. 그래서 독립 실행 형 코드가 가능합니다.

Code Generator documentation을 참조하십시오.

당신이 다음 델파이에서 같은 외부 기능에 액세스 DLLs에있는 C 프로그램을 변환 할 수 있습니다 경우

외부 선언 상대적으로 간단하다.

function MathematicaRoutine(const x : double) : double; external 'MyInterface.dll'; 

는 당신이 실제로 가능한 경우, 티카가 설치되어 있지 않은 사용, 정적 바인딩을 달성하기 위해 필요한 경우 작업이 점점 복잡성의 큰 숫자있을 바인딩됩니다. 나는 그것을 시도한 적이 없다.

3

저는 Lohninger의 SDL 라이브러리 (http://www.lohninger.com/mathpack.html)에 매우 만족하고 있습니다. 델파이로 작성되어 응용 프로그램에 바로 컴파일되므로이 스레드의 다른 응답에서 논의한 바와 같이 번들 또는 호출 규칙이나 부동 소수점 사용 차이점은 없습니다.

그가 무엇을 포함하고 있는지 살펴보십시오. 운이 좋으면 자신의 도서관에서 필요를 채울 것이고 사용하면됩니다.

+0

나는 매우 유용한 것처럼 보이는 SDL 라이브러리를 보았습니다. 그러나, 내가 특별히 원하는 기능을 지원하지 않았습니다. 나는 이제 TPMath와 함께 갔다. 감사 –

2

RAD Studio를 사용하여 프로젝트를 Delphi 및 C++ (작성자) 코드와 혼합 할 수 있습니다. 자동으로 생성 된 C 코드를 C++ Builder 파일 (.cpp)에 넣고 나머지는 Delphi 파일을 추가합니다.