Когда я передаю индексированный массив PHP:
$myVar = new COM('MyClass');
$myVar->DubbleArray([1, 2]);
…он приходит к C # или F # как System.Object [], и я могу с этим справиться, например:
[<ComVisible(true)>]
type LettersClass() =
member this.DubbleArray(array: obj[]) =
// do stuff with the values in the array
Но когда я передаю ассоциативный массив:
$myVar->DubbleArray(array('first'=>'1st','second'=>'2nd'));
…это приходит как DBNull.
Есть ли способ передать ассоциативный массив в функцию .NET через COM?
Используя толковый словарь в .NET позволяет иметь дело с именованными ключами. Вы всегда можете кодировать данные в формате JSON, а затем декодировать в .NET … 🙂
(Примечание: этот ответ основан на том, что вы не видите .net в вашем вопросе)
Я предполагаю, что это действительно зависит от того, как маршаллинг ассоциативного массива обрабатывается на стороне PHP. Фактический ответ очень хорошо может быть «совсем нет».
Если вы не можете понять это, я бы предложил обходной путь — лучше всего было бы преобразовать ассоциативный массив в многомерный массив, хранящий ключи и значения в отдельных столбцах, и передать его как obj[,]
,