在C#中,我有这个方法(.net framework 2.0)
public String Authenticate( String configUrl, out String tokenId)
我想从托管c ++代码中调用它 我有
__authenticator->Authenticate( gcnew System::String(hostUrl),gcnew System::String(temp));
但是tokenId又回来了。
我已经看到一些答案谈论在C#中使用^%,但这不会编译。
答案 0 :(得分:3)
使用
public String Authenticate(String configUrl, out String tokenId)
此
__authenticator->Authenticate(
gcnew System::String(hostUrl),
gcnew System::String(temp)
);
,在C#中,等同于(考虑Authenticate的签名)
__authenticator.Authenticate(
new String(hostUrl),
out new String(temp)
);
但是在C#中你不能做out new Something
,你只能out
到变量,字段......所以在C#你需要这样做:
String temp2 = new String(temp);
__authenticator.Authenticate(
new String(hostUrl),
out temp2
);
并且,考虑到参数位于out
,您可以:
String temp2;
__authenticator.Authenticate(
new String(hostUrl),
out temp2
);
现在,在C ++ / CLI中你有
System::String^ temp2 = gcnew System::String(temp);
__authenticator->Authenticate(
gcnew System::String(hostUrl),
temp2
);
或者,知道temp2
是out
(请注意,ref
和out
之间的区别仅由C#编译器检查,而不是由C ++ / CLI检查编译器)
// agnostic of the out vs ref
System::String^ temp2 = nullptr;
// or knowing that temp2 will be used as out, so its value is irrelevant
// System::String^ temp2;
__authenticator->Authenticate(
gcnew System::String(hostUrl),
temp2
);
答案 1 :(得分:1)
好的,我知道了,让我在String ^
中传递参数CString hostUrl;
String^ temp ;
String^ error = __authenticator.get() == nullptr ? "failed to get token" :
__authenticator->Authenticate( gcnew System::String(hostUrl),temp);