这是我的c ++结构(使用多字节字符集)
typedef struct hookCONFIG {
int threadId;
HWND destination;
const char** gameApps;
const char** profilePaths;
} HOOKCONFIG;
和.Net struct
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct HOOKCONFIG {
public int threadId;
public IntPtr destination;
// MarshalAs?
public string[] gameApps;
// MarshalAs?
public string[] profilePaths;
}
我遇到了一些问题,如何编组字符串数组? 当我在C ++中访问struct变量“profilePaths”时,我收到如下错误:
App.exe
中发生了未处理的“System.AccessViolationException”类型异常附加信息:尝试读取或写入受保护的内存。这通常是一个 表明其他内存已损坏。
MessageBox(0, cfg.profilePaths[0], "Title", MB_OK); // error ... Orz
答案 0 :(得分:1)
简单方法:将原型更改为IntPtr []:
public IntPtr[] gameApps;
public IntPtr[] profilePaths;
现在,当你打电话时,你需要大致以下的psudo代码:
GCHandle handle = GCHandle.Alloc(string);
gameApps = new IntPtr[] { GCHandle.ToIntPtr(handle) };
// Unmanaged call
handle.Free();