2011-03-05 5 views
4

MySql C 커넥터 6.02 헤더를 D로 변환하려고하는데, 이상한 충돌이 발생합니다. 내 생각 엔 구조체 나 함수를 변환 할 때 실수를 저질렀습니다. (C 언어에서는별로 좋지 않습니다.)C 헤더를 D로 변환 할 때의 문제

libmysql.dll에서 implib/system을 사용하여 lib 파일을 만들었습니다.

작동하도록 htod.exe를 가져올 수 없습니다. -hs (시스템 파일 포함)를 사용하면 시스템 파일을 찾을 수 없다는 불평이있었습니다.

Coffimplib.exe에는 내 보낸 내부 이름에 _ 앞에 _있는 옵션이 없습니다.

coff2omf 무료 버전을 찾을 수 없습니다.

mysql.d는 래퍼입니다. 래핑 된 정의 앞에 C 정의를 추가하여 버그를 쉽게 찾아 냈습니다. 파일에는 mysql dll과 변환 된 libfile도 포함됩니다.

mytest_fails.d를 컴파일 할 때 충돌이 발생합니다. mytest_works.d에만 어설 션이 있고, 이것이 작동합니다. -release로 mytest_works를 컴파일하면 충돌이 발생합니다. 내가 DMD 2.051

을 사용하고

Download mytest.zip from share1t.com

업데이트 : 나는 또한 D.learn 뉴스 그룹에 대한 몇 가지 질문을했습니다,하지만 난 누구를 거친 생각하지 않는다 코드. Connot get htod.exe to work

  • Compiler extensions
  • C Const
  • +0

    또한 htod가 전처리기에 의해 비활성화 된 내용을 행복하게 삭제합니다 (예 : #if VERFOO ... 버전 (VERFOO)로 변환되지 않음 ...) SWIG 또는 http :// C 헤더를 변환하려면 /dsource.org/projects/visuald/browser/trunk/c2d를 입력하십시오. – Trass3r

    +0

    @ Trass3r : 나는 그것을 언급하는 것을 잊었다. 그러나 swig는 단지 부서졌다. – simendsjo

    답변

    5

    stdcall을합니다 (C 호출 규칙에서 매우 다른) 윈도우 함수를 호출 규칙입니다. HTOD는 extern (Windows)으로 여러 함수를 표시하지 못했습니다. 이것은 HTOD가 매크로를 처리 할 준비가되어 있지 않기 때문에 정상입니다. (STDCALL은 매크로로 정의되어 있으며, msy.d의 나머지 주석에서 볼 수 있습니다). http://dl.dropbox.com/u/9218759/mysql.d

    지금, 당신은 OMF 형식의 적절한 가져 오기 라이브러리가 필요합니다

    여기에 업데이트 된 mysql.d 파일입니다. 나는 일반적으로 당신이 이것을 위해 implib을 사용하지 말 것을 권합니다. 나는 그것으로 몇 가지 문제가 있었고 다른 사람들은 그것을 사용하는 데 문제가 있다고보고했다. coffimplib을 사용하는 것이 좋습니다. 하지만 먼저 COFF 가져 오기 라이브러리가 필요합니다.

    COFF 가져 오기 라이브러리가있는 Mysql 릴리스는 http://dev.mysql.com/downloads/mirror.php?id=377977#mirrors에서 다운로드 할 수 있습니다 (Visual Studio 용으로 표시된 DLL 양식의 라이브러리는 일반적으로 COFF 가져 오기 라이브러리와 함께 제공됩니다).

    하지만 난 당신에게 여기 OMF 포맷으로 변환 된 COFF 가져 오기 라이브러리를 제공하고 있습니다 : 나는 당신의 테스트 케이스를 모두 시도하고 둘 다 지금은 잘 작동하는 것 http://dl.dropbox.com/u/9218759/libmysql.lib

    합니다.문제가 발생한 경우 번역 된 헤더 파일을 다시 확인해보십시오 (mysql.d). 모든 호출 규칙을 올바르게 지정하지 못한 것일 수 있습니다.

    +0

    감사합니다. htod를 작동시킬 수 없기 때문에 이것이 전적으로 실패한 것입니다. 오늘이나 내일 당신의 해결책을 드리겠습니다. Btw. OMF 라이브러리를 어떻게 만들었습니까? coff2omf를 구입하셨습니까? 아니면 다른 도구가 있습니까? – simendsjo

    +1

    여기 coffimplib을 찾을 수 있습니다. http://www.digitalmars.com/d/archives/c++/announce/864.html –

    +0

    감사합니다. 매력처럼 일했습니다. 나는 여전히 이상한 일들을 만났지 만 그것은 mysql에서 불분명 한 문서일지도 모른다. – simendsjo

    관련 문제