После нескольких комментариев, вот попытка:
Код C ++ (DLL), например.math.cpp, скомпилированный в HighSpeedMath.dll:
extern "C"
{
__declspec(dllexport) int __stdcall math_add(int a, int b)
{
return a + b;
}
}
C # код, например.Program.cs:
namespace HighSpeedMathTest
{
using System.Runtime.InteropServices;
class Program
{
[DllImport("HighSpeedMath.dll", EntryPoint="math_add", CallingConvention=CallingConvention.StdCall)]
static extern int Add(int a, int b);
static void Main(string[] args)
{
int result = Add(27, 28);
}
}
}
Конечно, если точка входа уже совпадает, указывать ее не нужно.То же самое с соглашением о вызовах.
Как уже упоминалось в комментариях, DLL должна предоставлять C-интерфейс.Это означает, что extern "C", без исключений, без ссылок и т. Д.
Edit:
Если у вас есть заголовок и исходный файл для вашей DLL, он можетвыглядеть так:
math.hpp
#ifndef MATH_HPP
#define MATH_HPP
extern "C"
{
__declspec(dllexport) int __stdcall math_add(int a, int b);
}
#endif
math.cpp
#include "math.hpp"
int __stdcall math_add(int a, int b)
{
return a + b;
}