C# C编组字符*到StringBuilder始终获取空字符串 我正在开发一个C++库和一个C应用程序,应该使用它。 该库接受两个数字输入参数和一个字符串输出参数。 我的问题是,在C应用程序中,这个参数总是得到一个空字符串。这是我的密码

C# C编组字符*到StringBuilder始终获取空字符串 我正在开发一个C++库和一个C应用程序,应该使用它。 该库接受两个数字输入参数和一个字符串输出参数。 我的问题是,在C应用程序中,这个参数总是得到一个空字符串。这是我的密码,c#,c++,marshalling,stringbuilder,C#,C++,Marshalling,Stringbuilder,C++方面: typedef struct sharedItem{ unsigned int tagId; unsigned char tagValue[256]; }sharedItem; extern "C" { int getSharedMemoryVariable(char* value, unsigned int variableTagId, int foundVariables) { sharedItem *item; set item prop

C++方面:

    typedef struct sharedItem{
unsigned int tagId;
unsigned char tagValue[256];
}sharedItem;


extern "C" {
int getSharedMemoryVariable(char* value, unsigned int variableTagId, int foundVariables)
{
    sharedItem *item;

        set item properly...

        strcpy(value, (char *)item->tagValue);

        check result and return properly...
}
}

C面

    [DllImport("C:\\SharedMemory.dll", CallingConvention=CallingConvention.Cdecl, CharSet=CharSet.Ansi)]
    public static extern int getSharedMemoryVariable(StringBuilder variableValue, UInt16 variableTagId, Int16 foundVariables);

    StringBuilder value = new StringBuilder(256);
    res = SharedMemory.getSharedMemoryVariable(value, 45, 14730);
我的问题是变量值总是一个空字符串。请注意,在C++侧,如果我替换< /p>
strcpy(value, (char *)item->tagValue);

该应用程序运行良好。 我希望有人能帮助我。 谢谢

编辑:

[DllImport]已锁定参数;而且不需要不安全的代码

谢谢@dan


通过执行memsetitem->tagValue,'\0',256*sizeofchar

您是否尝试使用字符串而不是StringBuilder?您可以尝试使用[Out,MarshalAsUnmanagedType.LPStr]StringBuilder variableValue。它准确地告诉运行时要做什么。不确定它是否有用,但也不会有什么害处。@Dan你能指出一个证明这一点的引用吗?这意味着我是正确的,事实上DllImport并没有固定参数。
strcpy(value, "test");