Я сделал довольно много с моим продуктом FE OrcaFlex .У вас есть два варианта ссылки на ваш C-код из Delphi: статический или динамический.Я связываю статически, потому что это делает распространение и управление версиями намного проще.Но на самом деле это довольно хитрый прием, чтобы заставить его работать статически, и вам приходится полагаться на ряд недокументированных аспектов Delphi.
Я подозреваю, что для ваших нужд лучше всего использовать динамическое связывание.По сути, вам нужно скомпилировать и связать ваш код C в DLL.Я рекомендую использовать для этого компилятор Borland C.Вы можете использовать бесплатную версию командной строки BCC55 для этого.Преимущество использования Borland C состоит в том, что он делает те же самые предположения о модуле с плавающей запятой 8087, что и Delphi.Если вы будете строить с MSVC, то обнаружите, что MS решила не повышать исключения с плавающей запятой.Borland C поднимает исключения с плавающей точкой.Это небольшой случай, но он становится уместным, если вы пытаетесь отправить продукт, который вам нужен, чтобы быть надежным.
Вы должны знать, что код C по умолчанию будет использовать соглашение о вызовах Cи я бы просто придерживался этого.Вы вносите это в Delphi, объявляя внешнюю подпрограмму как соглашение о вызовах cdecl.
Еще одна вещь, о которой вам нужно позаботиться, это определить четкий интерфейс между двумя модулями.Вы должны убедиться, что исключения не пересекают границу модуля и не пропускают какие-либо специальные типы (например, строки Delphi) через границу.Поэтому для строки используйте PChar (или даже лучше PAnsiChar или PWideChar, чтобы быть уверенным, что он не изменит значения при обновлении до Delphi 2009 и более поздних версий).