Может ли программа на C быть скомпилирована в DLL - PullRequest
2 голосов
/ 10 августа 2010

У меня возникла ситуация, когда клиент получил программу «C», которая выполняет шифрование столбцов на стороне клиентского приложения. И то же самое теперь будет использоваться в проекте DataWarehousing в одном из компонентов сценария, который поддерживает C #.

Есть ли способ, с помощью которого эта C-программа может быть скомпилирована в dll и импортирована в C # [или] нам нужно переписать это на C #?

Спасибо

Ответы [ 5 ]

3 голосов
/ 10 августа 2010

Если код клиента уже находится в DLL, вы можете использовать все подпрограммы из него, используя P \ Invoke в C #.Вот учебник .

1 голос
/ 10 августа 2010

Да, это возможно.

Создайте новый проект win32 dll в visual studio. Допустим, вы хотите создать метод C с именем sum и сделать его доступным через dll. Сначала вы создаете метод:

int _stdcall sum(int x , int y)
{
return x+y;
} 

И если VS не создал файл .def (он должен был это сделать), то создайте файл .def и напишите в этом файле следующее:

LIBRARY Example
DESCRIPTION Example library for C

EXPORTS
        sum @1

Это создаст доступный метод с именем sum available при загрузке dll. Теперь вы должны скомпилировать и использовать его в своем проекте на C #, используя DLLImport.

1 голос
/ 10 августа 2010

Он может быть скомпилирован в dll, но вам, вероятно, потребуется внести некоторые изменения в исходный код. Взгляните на этот урок . А для использования вашей dll в C # посмотрите P / Invoke здесь . Этого должно быть достаточно, чтобы вы пошли.

1 голос
/ 10 августа 2010

Смешивать управляемый (c #) и неуправляемый (c) код не так уж сложно, C # имеет замечательную функцию, называемую pinvoke , чтобы сделать это, также посмотрите это руководство по взаимодействиюуправляемый и неуправляемый код, то вы можете просто скомпилировать dll как обычный C dll

0 голосов
/ 10 августа 2010

Вместо использования P / Invoke мне легче создать проект библиотеки классов C ++ / CLI, где вы пишете управляемые классы в коде C ++, которые обертывают код C Затем из вашего проекта C # вы можете добавить ссылку на библиотеку классов и напрямую вызывать классы-оболочки.

...