您好 我有一个WCF Web服务器,它有一个需要从本机C ++应用程序调用的opeartion。我有一个桥接管理DLL工作,但我正在调用具有OUT对象的WCF操作。
C#opearation:
void DoWork(string indxNum, out ErrorWarningsData objerrc)
此处ErrorWarningsData是C#Web服务中的一个类。
这就是我的托管C ++代码的样子:
gcroot<Binding^> binding1 = gcnew WSHttpBinding();
gcroot<EndpointAddress^> address1 = gcnew EndpointAddress(gcnew String("http://usatondevlas1.na.praxair.com/Build15/ResourceCenterSVC/ResourceCenter.svc"));
gcroot<HelloServiceClient::ServiceReference2::ResourceCenterServiceContractClient^> client = gcnew HelloServiceClient::ServiceReference2::ResourceCenterServiceContractClient(binding1,address1);
gcroot<HelloServiceClient::ServiceReference2::ErrorWarningsData^> objEWData = gcnew HelloServiceClient::ServiceReference2::ErrorWarningsData;
但是当我尝试从WCF服务调用DoWork方法时,我收到错误。
这就是我的尝试:
client->DoWork("4278779",[Out] objEWData );
也尝试过,
client->DoWork("4278779",[Out] ^% objEWData );
和,
client->DoWork("4278779",[Out] % objEWData );
有人可以告诉我如何使用“OUT”访问该项目。 我可以找到一些示例来访问[Out] for int和string但是没有对象
PS:我按照以下内容链接以将WCF服务连接到本机应用程序 [链接] http://stackoverflow.com/questions/686452/create-wcf-service-for-unmanaged-c-clients
答案 0 :(得分:0)
您不需要任何额外的标记,以便在C ++ / CLI中将某些内容作为out参数传递。语义类似于在本机C ++中通过引用传递。
答案 1 :(得分:0)
我不确定你为什么在这些情况下使用gcroot。你可以这样做:
WSHttpBinding ^ binding1 = gcnew WSHttpBinding();
EndpointAddress ^ address1 = gcnew EndpointAddress(gcnew String ("http://usatondevlas1.na.praxair.com/Build15/ResourceCenterSVC/ResourceCenter.svc"));
HelloServiceClient::ServiceReference2::ResourceCenterServiceContractClient ^ client = gcnew HelloServiceClient::ServiceReference2::ResourceCenterServiceContractClient(binding1,address1);
HelloServiceClient::ServiceReference2::ErrorWarningData ^ objEWData = gcnew HelloServiceClient::ServiceReference2::ErrorWarningsData;
client->DoWork("4278779", objEWData);