Как создать DLL из программы на C, используя Turbo C - PullRequest
1 голос
/ 27 июля 2010

Я написал небольшую программу на Turbo C , и я хотел бы получить или создать DLL этой программы для использования с моим приложением C #.

Так как я могу создатьDLL программы на C, использующей Turbo C?
Я хотел бы использовать ее с программой на C # или VB в справочнике DLL.

Если найдено эта ссылка , но я не смогне понимаю.

Ответы [ 2 ]

3 голосов
/ 27 июля 2010

Не используйте Turbo C и компилируйте с Visual C ++, так как мы должны использовать соглашения о вызовах Win32. Предположим, что math.h является вашей библиотекой.

#include <math.h>

extern "C"
{
    __declspec(dllexport) double __stdcall MyPow(double, double);
}

extern double __stdcall MyPow(double x, double y)
{
    return pow(x, y);
}

А затем импортируйте его в свое приложение C #, используя DllImport.

class Program
{
    [DllImport("MyLibrary.dll")]
    extern static double MyPow(double x, double y);

    static void Main(string[] args)
    {
        Console.WriteLine(MyPow(2.0, 5.0));

        Console.ReadKey();
    }
}

Это делает ваш код крайне неуправляемым. Лучшим подходом было бы создание оболочки Managed C ++. Для этого создайте новый проект динамической библиотеки Visual C ++, включите Common Language RunTime Support (OldSyntax) в Свойства проекта> Свойства конфигурации> C / C ++> Общие и отключите C++ Exceptions в Свойства проекта> Свойства конфигурации> C / C ++> Генерация кода . Сборка для релизной цели.

extern "C"
{
    #include <math.h>
}

namespace Wrapper
{
    public __gc class MyClass
    {
        public:
            static double MyPow(double x, double y)
            {
                return pow(x, y);
            }
    };
};

Затем создайте новый проект Visual C #, обратитесь к только что созданному файлу .DLL и в Свойства проекта> Сборка проверьте Allow unsafe code, если вы используете указатели в исходной библиотеке и вам необходимо изменить их в вашем приложении C #.

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(Wrapper.MyClass.MyPow(2.0, 5.0));

        Console.ReadKey();
    }
}
3 голосов
/ 27 июля 2010

Turbo C (последний выпуск в 1989 году) - программа для DOS.Он не может создавать DLL-библиотеки Win32.

Поскольку вы уже используете Visual Studio для C #, я настоятельно рекомендую использовать Visual C ++ для вашей DLL.Visual C ++ говорит сам за себя (подсказка: Win32 DLL - это тип проекта, который вам нужен).

...