Windows C - передает указатель по ссылке на динамически выделенную память беззнакового символа с протоколом MIDL

0

Я использую протокол MIDL (RPC), и я пытаюсь передать указатель ссылкой на выделенную память unsigned char. но только первый атрибут массива, заполненный правильным значением.

КОД КОДЫ:

 // File FPGA_RPC_MIDL.idl
 [
    // A unique identifier that distinguishes this interface from other interfaces.
uuid(00000001-EAF3-4A7A-A0F2-BCE4C30DA77E),

// This is version 1.0 of this interface.
version(1.0)
 ]

interface FPGA_RPC_MIDL // The interface is named FPGA_RPC_MIDL
{

    int get_Message([ref, out]  unsigned char* message_out);

}

Код сервера:

int get_Message(
/* [ref][out] */ unsigned char *message_out)
{
   message_out[0] = 0x25;
   message_out[1] = 0x26;
   message_out[2] = 0x27;
   return 0;'
}

Код клиента:

int main
{
      message_out = (unsigned char *)malloc(sizeof(unsigned char)*3);
      get_Message(message_out);
      printf("%x, %x, %x",message_out[0],message_out[1],message_out[2])
}

вывод:

25,0,0

Как я могу передать по ссылке весь массив?

  • 0
    Посмотрите на эту ссылку - msdn.microsoft.com/en-us/library/windows/desktop/… Вы должны предоставить атрибут размера. В противном случае, как заглушка узнает, сколько данных возвращается.
Теги:
pointers
rpc
midl

1 ответ

1
Лучший ответ

[ref, out] - неправильный набор атрибутов для использования в этой ситуации. Вы сообщаете MIDL, что get_Message() возвращает один символ по ссылке в качестве выходного значения, и именно так ваши данные собираются, но это не то, что хочет ваш код. Вместо этого он хочет заполнить многосимвольный массив, поэтому вы должны его маршалировать соответствующим образом.

Попробуй это:

int get_Message([in, out, size_is(3)] unsigned char message_out[]);

Или просто:

int get_Message(unsigned char message_out[3]);

Подробнее см. В MSDN:

Массивы MIDL

Ещё вопросы

Сообщество Overcoder
Наверх
Меню