Можно ли сделать что-то вроде этого:Как передать параметр, который может иметь тип int/double/string/int [] из C# в native C?
Native DLL:
void SetFieldValue(const char *Field, void *pValue, int Count)
{
char *StrValue;
int *IntArrayValue;
if (!strcmp(Field, "StrField"))
{
StrValue = malloc((Count + 1) * sizeof(char));
strcpy(StrValue, (char *)pValue);
DoSomethingWithStringValue(StrValue);
free(StrValue);
}
else if (!strcmp(Field, "IntArrayField"))
{
IntArrayValue = malloc(Count * sizeof(int));
memcpy(IntArrayValue, pValue, Count);
DoSomethingWithIntArrayValue(IntArrayValue);
free(StrValue);
}
//... and so on
}
Управляется:
[DllImport(DllName, CallingConvention = DllCallingConvention)]
private static extern void SetFieldValue(string fieldName, IntPtr value, int count);
public void SetIntArray()
{
int[] intArray = { 1, 2, 3 };
SetFieldValue("IntArrayField", intArray, 3);
}
public void SetString()
{
SetFieldValue("StrField", "SomeValue", 9);
}
//... and so on
В чем проблема? Ваш код выглядит нормально для меня. – LPs
Моя проблема в том, что PInvoke печально известен тем, что трудно найти ошибки. Я пытаюсь понять, как эти вещи лучше всего/наиболее безопасно. –