我的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;
}
Run Code Online (Sandbox Code Playgroud)
我通过了这个
typedef struct userProfile
{
int profileRevision;
char *firstName;
char *lastName;
char *memberids;
char *emailAddress;
} userProfile_t;
Run Code Online (Sandbox Code Playgroud)
我的C .dll具有这样的功能
int getUserProfileData(userProfile_t *pUserProfile);
Run Code Online (Sandbox Code Playgroud)
以获取上述结构中字符串的值。我从C#代码中调用此函数,并正确填充了int值'profileRevision'。像“ firstname”这样的字符串会在上述C函数中正确动态分配并填充,但是当代码返回C#环境时,该结构中的所有字符串均为null。处理此问题的最佳方法是什么?
我希望能够将stderr重定向到C字符串,因为我需要在我正在编写的程序中使用该字符串.我想避免写入文件(在硬盘上),然后读取文件以获取字符串.完成这项工作的最佳方法是什么?