C# C编组字符*到StringBuilder始终获取空字符串 我正在开发一个C++库和一个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
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");