C # взаимодействующий вопрос - PullRequest
0 голосов
/ 07 августа 2011

У меня есть такая структура:

[StructLayout(LayoutKind.Sequential)]
internal struct EVENT_TRACE_PROPERTIES
{
    internal WNODE_HEADER WNode;

    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = (int)EventTracePropertiesStringSize)]
    internal string LoggerName;

    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = (int)EventTracePropertiesStringSize)]
    internal string LogFileName;
}

Как мне скопировать строку C #, str в структуру памяти, на которую указывает LogFileName?

Ответы [ 2 ]

2 голосов
/ 07 августа 2011

Вы просто присваиваете поле:

EVENT_TRACE_PROPERTIES item;
item.LogFileName = "My String";
0 голосов
/ 07 августа 2011

Я использовал следующее для назначения и получения значения:

[TestFixture]
public class MarshalAsTest
{
    [Test]
    public void TestMarshalAs_SetLogFileName( )
    {
        SomeClass someClass = new SomeClass( );
        string logFile = "LogFileName.log";

        someClass.SetLogFile(logFile);

        Assert.AreEqual(logFile, someClass.GetLogFile( ));            
    }
}

public class SomeClass
{
    EVENT_TRACE_PROPERTIES props;

    public void SetLogFile([MarshalAs(UnmanagedType.LPWStr)]String msg)
    {
        props.LogFileName = msg;
    }

    [return: MarshalAs(UnmanagedType.LPWStr)]
    public string GetLogFile( )
    {
        return props.LogFileName;
    }


    [StructLayout(LayoutKind.Sequential)]
    internal struct EVENT_TRACE_PROPERTIES
    {
        internal WNODE_HEADER WNode;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
        internal string LoggerName;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
        internal string LogFileName;
    }

}

См. MSDN: MarshalAsAttribute

Примечание: я использовал SizeConst 16 в качестве произвольного значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...