我的 C# 中有一个结构如下:
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)]
public struct UserProfileData
{
int userProfileRevision;
[MarshalAs(UnmanagedType.LPStr)]
public String firstName;
[MarshalAs(UnmanagedType.LPStr)]
public String lastName;
[MarshalAs(UnmanagedType.LPStr)]
public String memberids;
[MarshalAs(UnmanagedType.LPStr)]
public String emailAddress;
}
我传递了一个参考
typedef struct userProfile
{
int profileRevision;
char *firstName;
char *lastName;
char *memberids;
char *emailAddress;
} userProfile_t;
我的 C .dll 有这样的功能
int getUserProfileData(userProfile_t *pUserProfile);
获取上述结构中字符串的值。我从 C# 代码调用此函数,并且正确填充了 int 值“profileRevision”。像 'firstname' 这样的字符串在上面的 C 函数中被正确地动态分配和填充,但是当代码返回到 C# 环境时,结构中的所有字符串都是空的。处理这个问题的最佳方法是什么?