Я создал dll в c ++ и хотел вызвать функцию из нее, используя c #.У меня есть ошибка, если функция, которую вызывает программа, возвращает строку. Код Dll:
#include <string>
using namespace std;
#define EXPORT_API extern "C" __declspec(dllexport)
EXPORT_API void DllFunc()
{
MessageBoxA(0,"DDL box", "Yeah!", 0);
}
EXPORT_API string DllFuncStr()
{
return "testStr";
}
Код приложения C #:
[DllImport("dllka.dll")]
static extern void DllFunc();
[DllImport("dllka.dll")]
static extern string DllFuncStr();
private void btnStart_Click(object sender, RoutedEventArgs e)
{
DllFunc();
string str = DllFuncStr();
}
"DllFunc ();"- работает хорошо, но в строке "string str = DllFuncStr ();"у меня была ошибка:
Во время выполнения произошла фатальная ошибка.Адрес ошибки был 0x5e6dceca, в потоке 0x16b0.Код ошибки 0xc0000005.Эта ошибка может быть ошибкой в CLR или в небезопасных или не поддающихся проверке частях пользовательского кода.Распространенными источниками этой ошибки являются ошибки пользовательского маршалинга для COM-взаимодействия или PInvoke, которые могут повредить стек.
Что не так с строковым типом?Как решить эту проблему?