求教RPC问题

clyfan 2010-05-06 10:55:54
我看有些代码这样写通过编译的,我尝试时出现了以下错误,unsigned char* 与RPC_WSTR的转换问题,请问为什么呢,谢谢

RPC_STATUS status;
unsigned char * pszUuid=NULL;
unsigned char * pszProtocolSequence="ncacn_ip_tcp";
unsigned char * pszNetworkAddress="139.1.7.110";
unsigned char * pszEndPoint="8080";
unsigned char * pszOptions=NULL;
unsigned char * pszStringBinding;
unsigned long ulCode;
scanf("%s",pszNetworkAddress);
status=RpcStringBindingCompose(
pszUuid,
pszProtocolSequence,
pszNetworkAddress,
pszEndPoint,
pszOptions,
&pszStringBinding);


error C2440: “初始化”: 无法从“const char [13]”转换为“unsigned char *”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
1> : error C2440: “初始化”: 无法从“const char [12]”转换为“unsigned char *”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
1>: error C2440: “初始化”: 无法从“const char [5]”转换为“unsigned char *”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
1>: error C2664: “RpcStringBindingComposeW”: 不能将参数 1 从“unsigned char *”转换为“RPC_WSTR”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
1> : error C2664: “RpcBindingFromStringBindingW”: 不能将参数 1 从“unsigned char *”转换为“RPC_WSTR”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
1>: error C2664: “RpcStringFreeW”: 不能将参数 1 从“unsigned char **__w64 ”转换为“RPC_WSTR *”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
...全文
299 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
clyfan 2010-05-06
  • 打赏
  • 举报
回复
handle_t RPC_Binding;
RPC_STATUS status;
unsigned char * szStringBinding = NULL;
status=RpcStringBindingCompose(
NULL,
"ncacn_ip_tcp",
"139.1.7.110",
"8080",
NULL,
&szStringBinding);
status = RpcBindingFromStringBinding(szStringBinding,&RPC_Binding);

RpcStringFree(&szStringBinding);

error C2664: “RpcStringBindingComposeW”: 不能将参数 1 从“unsigned char *”转换为“RPC_WSTR”
“RpcBindingFromStringBindingW”: 不能将参数 1 从“unsigned char *”转换为“RPC_WSTR”
error C2664: “RpcStringFreeW”: 不能将参数 1 从“unsigned char **__w64 ”转换为“RPC_WSTR *”

这样仍无法通过编译,请问unsigned char * szStringBinding需要做如何改动
logiciel 2010-05-06
  • 打赏
  • 举报
回复
这段代码按C程序编译没有问题,但按C++程序编译要改为:

unsigned char * pszProtocolSequence=reinterpret_cast <unsigned char*>("ncacn_ip_tcp");
unsigned char * pszNetworkAddress=reinterpret_cast <unsigned char*>("139.1.7.110");
unsigned char * pszEndPoint=reinterpret_cast <unsigned char*>("8080");

另外,pszNetworkAddress已定义为常数指针,不能再执行以下语句:
scanf("%s",pszNetworkAddress);
clyfan 2010-05-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 logiciel 的回复:]
引用 4 楼 clyfan 的回复:
我常用的是VC2005,编译不能通过,刚换了VC6.0试了,可以编译通过.请问在VC2005上有什么解决办法吗


unsigned char * szStringBinding = NULL;
RpcStringFree(reinterpret_cast <RPC_WSTR *>(&szStringBinding));
[/Quote]

status=RpcStringBindingCompose(
NULL,
reinterpret_cast <RPC_WSTR >(pszProtocolSequence),
reinterpret_cast <RPC_WSTR >(pszNetworkAddress),
reinterpret_cast <RPC_WSTR >(pszEndPoint),
NULL,
reinterpret_cast <RPC_WSTR*>(&szStringBinding));
这样可以编译通过
status = RpcBindingFromStringBinding(reinterpret_cast <RPC_WSTR >(szStringBinding),&RPC_Binding);这里运行status的值却是1704
logiciel 2010-05-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 clyfan 的回复:]
我常用的是VC2005,编译不能通过,刚换了VC6.0试了,可以编译通过.请问在VC2005上有什么解决办法吗
[/Quote]

unsigned char * szStringBinding = NULL;
RpcStringFree(reinterpret_cast <RPC_WSTR *>(&szStringBinding));
clyfan 2010-05-06
  • 打赏
  • 举报
回复
我常用的是VC2005,编译不能通过,刚换了VC6.0试了,可以编译通过.请问在VC2005上有什么解决办法吗
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 clyfan 的回复:]
handle_t RPC_Binding;
RPC_STATUS status;
unsigned char * szStringBinding = NULL;
status=RpcStringBindingCompose(
NULL,
"ncacn_ip_tcp",
"139.1.7.110",
"8080",
NULL,
&szStringB……
[/Quote]

你同的的是支持宽字符编译器

所以RPC_WSTR *不接受普通char*

wchar*



65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧