Нужно вернуть строку с кода написанного на С++ в С#.
Код на С++:
extern "C"
__declspec(dllexport)
char* GetString()
{
char* someString=new char[10] {"Hello"};
return someString;
}
extern "C"
__declspec(dllexport)
void Test()
{
cout << "Test";
}
Код на C#:
internal static class NativeMethods
{
private const string DllPath = @"..\..\..\Debug\VirtualFolder.dll";
[DllImport(DllPath)]
public static extern string GetString();
[DllImport(DllPath)]
public static extern void Test();
}
class Program
{
static void Main(string[] args)
{
NativeMethods.Test(); // Test на экране
string name = NativeMethods.GetString(); // ошибка на этапе выполнения
Console.Write(name);
}
}
Для управления подобными ситуациями существует атрибут MarshalAsAttribute:
[DllImport(DllPath)]
[return: MarshalAs(UnmanagedType.LPStr)]
public static extern string GetString();
Придется делать вот так:
[DllImport("CppDll.dll", EntryPoint= "GetString")]
private static extern IntPtr _GetString();
public static string GetString() => Marshal.PtrToStringAnsi(_GetString());
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Когда мы производим удаление с помощью Remove range в ef core у нас все выполняется в транзакции? Если, что то не удалится из списка удаляемых объектов...
Есть 2 таблицы: user и transactionСвязь один ко многим (1 пользователь – много транзакций)
У меня есть программа в которой выводятся данные в QTableView из таблицы mysqlКак реализовать что бы при нажатии на запись таблицы в списке подробная...