Получить строку из string метода C++
Цитата: Удаленный пользователь от 29.05.2022, 14:38Всем привет, сразу говорю, в плюсах очень плохо разбираюсь. В общем есть string метод на C++ (DLL), нужно вызвать его на C# и получить строку.
С++:#include <string> using namespace std; extern "C" string GetString() { return "Test"; }C#:
[DllImport(@"C:\Users\Admin\Desktop\TestDLL.dll")] public static extern string GetString(); ... MessageBox.Show(GetString());Выдаёт "System.EntryPointNotFoundException". Подскажите, пожалуйста, как можно реализовать такое.
Всем привет, сразу говорю, в плюсах очень плохо разбираюсь. В общем есть string метод на C++ (DLL), нужно вызвать его на C# и получить строку.
С++:
#include <string>
using namespace std;
extern "C" string GetString()
{
return "Test";
}
C#:
[DllImport(@"C:\Users\Admin\Desktop\TestDLL.dll")] public static extern string GetString(); ... MessageBox.Show(GetString());
Выдаёт "System.EntryPointNotFoundException". Подскажите, пожалуйста, как можно реализовать такое.
Цитата: Удаленный пользователь от 29.05.2022, 14:52UPD: Тупанул, не дописал код
C++:
#include <string> using namespace std; extern "C" _declspec(dllexport) string GetString() { return "Test"; }Молча крашит с ошибкой "завершилась с кодом -1073740940 (0xc0000374)". Скорее всего потому что string нельзя передать, подскажите как тогда можно сделать.
UPD: Тупанул, не дописал код
C++:
#include <string>
using namespace std;
extern "C" _declspec(dllexport) string GetString()
{
return "Test";
}
Молча крашит с ошибкой "завершилась с кодом -1073740940 (0xc0000374)". Скорее всего потому что string нельзя передать, подскажите как тогда можно сделать.
Цитата: Удаленный пользователь от 29.05.2022, 15:29В общем решил проблему, пользуйтесь.
C++:
#include <iostream> #include <string> #include <comdef.h> using namespace std; extern "C" _declspec(dllexport) BSTR GetString() { return SysAllocString(L"Test"); }C#:
[DllImport(@"C:\Users\Admin\Desktop\TestDLL.dll")] [return: MarshalAs(UnmanagedType.BStr)] public static extern string GetString(); ... MessageBox.Show(GetString());
В общем решил проблему, пользуйтесь.
C++:
#include <iostream>
#include <string>
#include <comdef.h>
using namespace std;
extern "C" _declspec(dllexport) BSTR GetString() { return SysAllocString(L"Test"); }
C#:
[DllImport(@"C:\Users\Admin\Desktop\TestDLL.dll")] [return: MarshalAs(UnmanagedType.BStr)] public static extern string GetString(); ... MessageBox.Show(GetString());