问题描述
C# 代码:
public int CSharpMethodName(string str,params object[] args)
{
....
}
C++ 代码:
bool CPPMethodName(const CString& cstr,CString parameters[])
{
//The object is already initialized with gcroot in order to access to C# code.
//Here I want to give parameters to the CSharpMethodName
result = obj->CSharpMethodName(gcnew System::String(sqlQuery),parameters);
}
这是添加到 C++ 项目作为参考时 C# 方法的签名:
CSharpMethodName(System::String^,... array<System::Object^>^)
如何将参数的 CString 数组类型赋予 CSharp 方法?如果有任何不清楚的地方,请告诉我。
谢谢
解决方法
我发现我必须将非托管数组转换为托管数组。
这是对我有用的完整代码:
bool CPPMethodName(const CString& cstr,const CString parameters[],size_t size)
{
cli::array<System::String^>^ managedParametersArray = GetManagedArray(parameters,size);
result = obj->CSharpMethodName(gcnew System::String(sqlQuery),managedParametersArray );
return result;
}
cli::array<System::String^>^ AdoHelperWrapper::GetManagedArray(const CString paramaters[],size_t size)
{
cli::array<System::String^>^ result = gcnew cli::array<System::String^>(size);
for (size_t i = 0; i < size; i++)
{
result[i] = gcnew System::String(paramaters[i]);
}
return result;
}