Как создать 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 - это тип проекта, который вам нужен).