Проблемы с преобразованием заголовка C в D - PullRequest
4 голосов
/ 05 марта 2011

Я пытаюсь перевести заголовки MySql C Connector 6.02 в D, но у меня возникают странные сбои.Я предполагаю, что я сделал несколько ошибок при переводе структур или функций (я не очень хорош в C).

Я использовал implib / system в libmysql.dll для создания файла lib.

Я не мог заставить htod.exe работать.Использование -hs (включая системные файлы) жаловалось, что не может найти системные файлы.

У Coffimplib.exe не было возможности добавить _ к экспортированным внутренним именам.

Я не смогнайдите бесплатную версию coff2omf.

mysql.d - это оболочка.Я включил определение C перед каждым упакованным определением, чтобы легче было обнаруживать ошибки.Файл включает в себя DLL MySQL и также преобразованный libfile.

При компиляции mytest_fails.d происходит сбой.mytest_works.d имеет только assert, и это заставляет его работать. Компиляция mytest_works с -release также приводит к сбою.

Я использовал dmd 2.051

Загрузите mytest.zip с share1t.com

Обновление: Я также задавал некоторые вопросы по этому поводу в группе новостей D.learn, но не думаю, что кто-нибудь прошел этот код.

1 Ответ

5 голосов
/ 08 марта 2011

stdcall - это соглашение о вызовах функций Windows (очень отличающееся от соглашений о вызовах C).HTOD не удалось пометить несколько функций с помощью extern (Windows) .Это нормально, поскольку HTOD не оборудован для обработки макросов ( STDCALL определен как макрос, я могу видеть это из оставшихся комментариев в msyql.d).

Вот обновленныйФайл mysql.d: http://dl.dropbox.com/u/9218759/mysql.d

Теперь вам нужна соответствующая библиотека импорта в формате OMF.Я бы вообще посоветовал вам не использовать implib для этого.У меня было несколько проблем с этим, и другие сообщили о проблемах с его использованием.Использование coffimplib - это путь.Но сначала вам понадобится библиотека импорта COFF.

Если вам это нужно, выпуск Mysql с библиотекой импорта COFF можно скачать здесь: http://dev.mysql.com/downloads/mirror.php?id=377977#mirrors (Библиотеки в форме DLL, помеченные для VisualStudio обычно поставляется с библиотекой импорта COFF).

Но я предоставляю вам переведенную библиотеку импорта COFF в формате OMF здесь: http://dl.dropbox.com/u/9218759/libmysql.lib

Я испробовал оба ваших тестаи они оба, кажется, работают нормально сейчас.В случае проблем попробуйте еще раз проверить переведенный заголовочный файл (mysql.d), возможно, я пропустил, чтобы правильно указать все соглашения о вызовах.

...