Я использую протокол MIDL (RPC), и я пытаюсь передать указатель по ссылке на выделенную память без знака. но только первый атрибут массива заполнен правильным значением.
MIDL-код:
// 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
Как я могу передать по ссылке весь массив?
[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 для более подробной информации: