Маршалинг структуры указателей широких строк в C# приложение

Узнай цену своей работы

Формулировка задачи:

Dll:
#include "stdafx.h"
#include "windows.h"
 
struct MyStruct
{
public:
    LPWSTR str1;
    LPWSTR str2;
};
 
extern "C" __declspec(dllexport) void Func(MyStruct* s)
{
    WCHAR* value;
    value = L"any value";
 
    s->str1 = value;
    s->str2 = value;
}
C#:
        [StructLayout(LayoutKind.Sequential)]
        struct MyStruct {
            [MarshalAs(UnmanagedType.LPWStr)]
            public string str1;
            [MarshalAs(UnmanagedType.LPWStr)]
            public string str2;
        }
        
        [DllImport("dll.dll", CallingConvention = CallingConvention.Cdecl)]
        static extern void Func(ref MyStruct s);
 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
            MyStruct s = new MyStruct();
            Func(ref s);
 
            MessageBox.Show(s.str1 + " : " + s.str2);
Функция выполняется, но MsgBox не выводится. Как исправить? Код я упросил найдя реальную проблему своего приложения, так что ничего не меняйте и не говорите что можно упростить)))

Решение задачи: «Маршалинг структуры указателей широких строк в C# приложение»

textual
Листинг программы
1
2
3
4
5
6
7
8
9
10
11

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.333 из 5
Похожие ответы