【发布时间】:2010-11-09 01:45:56
【问题描述】:
尽我所能,我无法将此托管 C++ 代码转换为 C++/CLI。有人可以指点一下吗(双关语)?
static String *ignoreStrings[];
稍后在代码中,调用了 Add(string) 方法。在其他地方,在一些 C# 代码中,
new String[]{"foo", "bar"}
被传递给一个函数,该函数以某种方式转换为上面的 ignoreStrings 类型。
我试过这个语法:
static array<String^> ^ignoreStrings;
但它不能从那个 C# 数组中强制转换,而且它也没有 add 方法。
编辑:更完整的代码,希望这能以某种方式改变问题......
private:
static String *ignoreStrings[];
public:
void AddIgnoreString(String *ignore)
{
AddOneIgnoreString(ignore);
}
void SetIgnoreStringData(String *ignore[])
{
SetIgnoreStrings(ignore);
}
static void SetIgnoreStrings(String *ignore[])
{
ignoreStrings = ignore;
}
static void AddOneIgnoreString(String ^ignore)
{
ignoreStrings->Add(ignore);
}
在其他地方,在 C# 代码中,进行了以下调用:
SetIgnoreStrings(new String[]{"foo", "bar"});
这是我试图将 C++ 代码转换为:
private:
static array<String^> ^ignoreStrings;
public:
virtual void AddIgnoreString(String ^ignore)
{
AddOneIgnoreString(ignore);
}
virtual void SetIgnoreStringData(array<String^> ^ignore)
{
SetIgnoreStrings(ignore);
}
static void SetIgnoreStrings(array<String^> ^ignore)
{
ignoreStrings = ignore;
}
static void AddOneIgnoreString(String ^ignore)
{
ignoreStrings->Add(ignore);
}
static array<String^> ^GetIgnoreStrings()
{
return ignoreStrings;
}
【问题讨论】:
-
你能不能用反射器看看从“static String *ignoreStrings[];”生成什么类型?以及从“ignoreStrings->Add(ignore);”生成的 IL 代码是什么线?我不认为 ignoreStrings 是一个 .NET 数组,而是一个 ArrayList、List
或类似的东西。因为 .NET 数组没有 Add() 方法!
标签: c++-cli managed-c++