使用托管C ++代码中的“Out”调用C#操作

时间:2011-04-18 15:49:00

标签: wcf visual-c++ c#-4.0 c++-cli

您好 我有一个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

2 个答案:

答案 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);