如何在PB中声明这个结构体中的变量[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]

有个dll是给了c#的例子

struct xxx{
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
    string name;
    int port;
}

这是为了让c#表示方便采用的声明方式。也就是说要调用传统的dll时,name必须转换给UCHAR[16]

也就是说内存对齐后是

UCHAR 16 BYTES

INT  4 BYTES

我最开始用错声明了。PB中声明成

blob{16} name

long port

调用时跟踪看name在被调用后已经变化了,而且造成PB崩溃。

后面仔细想想。在pb中,非简单变量都是一个指针,比如这里的blob{16}。name那里只是一个4 BYTES的指针。也就是

BLOB指针指向一个blob{16}的地址  4 BYTES

long 4 BYTES

所以只有8 BYTES,是不对的。无法对齐,也无法传入参数。

实际上,c#的申明就是c++中的

struct{

   char name[16];

   int port;

}

最后在pb中申明为

global type str_xxx from structure

    character name [16]

    long port

end type

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值