Как создать DLL из программы на C, используя Turbo C

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

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

Если нашел эту ссылку, но я не смог ее понять.

2 ответа

Решение

Не используйте 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();
    }
}

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

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

Другие вопросы по тегам