小编slk*_*ndy的帖子

无法封送包含union的结构

我有一个C++结构,如下所示:

struct unmanagedstruct
{
    int             flags;
    union
    {
        int             offset[6];
        struct
        {
            float           pos[3];
            float           q[4];
        } posedesc;
    } u;
};
Run Code Online (Sandbox Code Playgroud)

而我正试图在C#中将其编组为:

[StructLayout(LayoutKind.Explicit)]
public class managedstruct {
    [FieldOffset(0)]
    public int flags;

    [FieldOffset(4), MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 6)]
    public int[] offset;

    [StructLayout(LayoutKind.Explicit)]
    public struct posedesc {
        [FieldOffset(0), MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 3)]
        public float[] pos;

        [FieldOffset(12), MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 4)]
        public float[] q;
    }

    [FieldOffset(4)]
    public posedesc pose;
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试将数据加载到我的结构中时,只有偏移数组的前3个元素存在(数组的长度为3).我可以确认它们的值是正确的 - 但我仍然需要其他3个元素.我做错了什么吗?

我正在使用这些函数来加载结构:

private static IntPtr addOffset(IntPtr baseAddress, int byteOffset) { …
Run Code Online (Sandbox Code Playgroud)

c# c++ struct marshalling unions

5
推荐指数
1
解决办法
1741
查看次数

无法将字符串传递给CreateThread接收器

我有一个看起来像这样的线程函数:

DWORD WINAPI Thread_ProcessFile( LPVOID lpParam )  {
 char *filename = (char*)lpParam;
 printf( "%s\n", filename );
}
Run Code Online (Sandbox Code Playgroud)

我还有一个调用CreateThread的类,并将上述函数用于例程地址:

void CMyClass::ProcessFile( void ) {
 HANDLE tHwnd = 0;
 char szBuffer[128];
 strcpy( szBuffer, "test_string" );

 tHwnd = CreateThread( NULL, 0, Thread_ProcessFile, (LPVOID)szBuffer, 0, NULL );  
 if ( tHwnd == NULL )
  return;
}
Run Code Online (Sandbox Code Playgroud)

问题是例程正在接收/打印垃圾字符串而不是真实的字符串(例如随机字符集,如果有的话).但是,如果我这样做:

tHwnd = CreateThread( NULL, 0, Thread_ProcessFile, (LPVOID)"test_string", 0, NULL );
Run Code Online (Sandbox Code Playgroud)

正确接收和打印字符串.如何正确构建字符串并将其传递给我的线程函数?

c++ string multithreading

2
推荐指数
1
解决办法
1556
查看次数

标签 统计

c++ ×2

c# ×1

marshalling ×1

multithreading ×1

string ×1

struct ×1

unions ×1