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