Пытаюсь на C# написать вызов функций из библиотеки на C++. Функции строковые и числовые. Если вызывать только один ну из функций, то все нормально, а если все сразу (как в исходниках снизу) то крешится. Не могу понять в чем ошибки — помогите :]
Библиотека C++:
#if __GNUC__ >= 4
#define DLL_PUBLIC __attribute__ ((visibility("default")))
#define DLL_LOCAL  __attribute__ ((visibility("hidden")))
#else
#define DLL_PUBLIC
#define DLL_LOCAL
#endif
#include "cstdlib"
#include "iostream"
#include <string.h>
using namespace std;
//ФУНКЦИИ С ЧИСЛАМИ
///////////////////
//Вычисление процента из чисел полученных от C#
extern "C" DLL_PUBLIC float cpp_get_percent (float from_number, float percent ) {
return from_number*percent/100;
}
//ФУНКЦИИ С ТЕКСТОМ
///////////////////
//Получение строки из C# и отдача строки из C++
extern "C" DLL_PUBLIC char* cpp_set_string (const char* ss) {
char* c;
strcpy(c,ss);
return c;
}
//Отдача строки из C++
extern "C" DLL_PUBLIC char* cpp_get_string () {
char* c;
string ss = "Я строка из C++";
strcpy(c,ss.c_str());
return c;
}
Вызов в C#:
using System;
using System.Runtime.InteropServices;
using System.Text;
namespace scbot_csharp {
	class MainClass {
		[DllImport("libtest")]
		public static extern float cpp_get_percent(float from_number, float percent);
		[DllImport("libtest",CallingConvention = CallingConvention.Cdecl)]
		public static extern IntPtr cpp_set_string(string s);
		[DllImport("libtest",CallingConvention = CallingConvention.Cdecl)]
		public static extern IntPtr cpp_get_string();
		static void CppPercent() {
			float p = cpp_get_percent(46, 10 );
			Console.WriteLine ("Я процент из C++: "+p.ToString());
		}
		static void CppSetString() {
			string s = "Я строка из C# в C++";
			IntPtr t = cpp_set_string(s);
			String result = Marshal.PtrToStringAuto(t);
			Console.WriteLine (result);
		}
		static void CppGetString() {
			IntPtr t = cpp_get_string();
			String result = Marshal.PtrToStringAuto(t);
			Console.WriteLine (result);
		}
		public static void Main (string[] args) {
			CppPercent();
			CppSetString();
			CppGetString();
		}
	}
}


