Windows C - 使用 MIDL 协议通过引用动态分配的 unsigned char 内存传递指针
Posted
技术标签:
【中文标题】Windows C - 使用 MIDL 协议通过引用动态分配的 unsigned char 内存传递指针【英文标题】:Windows C - Pass pointer by reference to dynamic allocated memory of unsigned char with MIDL Protocol 【发布时间】:2014-05-31 20:02:18 【问题描述】:我正在使用 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
如何通过引用传递所有数组?
【问题讨论】:
看看这个链接 - msdn.microsoft.com/en-us/library/windows/desktop/… 你必须提供一个 size 属性。否则,存根怎么知道返回了多少数据。 【参考方案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 Arrays
【讨论】:
以上是关于Windows C - 使用 MIDL 协议通过引用动态分配的 unsigned char 内存传递指针的主要内容,如果未能解决你的问题,请参考以下文章