我正在开发一个C ++库和一个应该使用它的C#应用程序。 该库有两个数字输入参数和一个字符串输出参数。 我的问题是在C#应用程序中,我总是为这个参数提供一个空字符串。这是我的代码。
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#side
[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 ++方面,如果我替换
strcpy(value, (char *)item->tagValue);
与
strcpy(value, "test");
应用程序正常。 我希望有人可以帮助我。 谢谢
答案 0 :(得分:-1)
编辑:
[DllImport]已经引脚参数;并且不需要不安全的代码
谢谢@dan
无论如何,可以通过memset(item->tagValue, '\0', 256*sizeof(char));