Там вызовы делаются через... ну ты понял.
[DllImport("../../../Release/RContDll1.dll", EntryPoint = "math_add", CallingConvention = CallingConvention.StdCall)]
static extern int Add(int a, int b);
А в библиотеке должно быть такое:
extern "C"
{
__declspec(dllexport) int __stdcall math_add(int a, int b)
{
return a + b;
}
}
ИМХО, проще написать на C "прокладку" которую будет вызывать C#, а она в свою очередь вызовет настоящую функцию dll.
Данные передаются нормально - по адресу структурой, а уже потом в C# начинается цирк с [MarshalAs(UnmanagedType.ByValTStr, SizeConst = ....)]