c#string to unmanaged c ++ dll

时间:2012-01-21 14:16:18

标签: c# c++

我需要写一些像

这样的东西
switch (nameOfType) 
{
  case "burk":
    return "zzzz";

在我的c ++ DLL中(我需要这个来比较类型名称)

其中nameOfType是来自c#的字符串(通过DLLImport) 但是我在c ++中很新 - 我必须使用什么类型来在c ++中使用字符串,就像在c#中一样?

2 个答案:

答案 0 :(得分:2)

C / C ++中最简单的字符串是NULL终止字符数组。您通常可以将来自C#的托管字符串封送为const char*类型。

您发布的代码无法在C ++中使用。 C ++中的switch语句只允许整数类型作为操作数。获得所需内容的最简单方法是重复if

if (strcmp(nameOfType, "burk") == 0)
   return "zzzz";
else if (strcmp(nameOfType, "xyz") == 0)
   return "yyyy";
else ... 

如果您需要更多字符串功能,则应考虑使用std::string类。它支持常规搜索,比较,插入和子串操作。

答案 1 :(得分:1)

您不能在C ++中使用C#中的switch语句中使用char*。你可以做的一件事是用枚举替换它

enum StringEnum { burk , foo , bar };

map<string,StringNum> m;

m["burk"] = burk;
m["foo"]  = foo;
m["bar"]  = bar;

现在您可以使用如下所示的开关语句

StringEnum e = m[nameOfType];
switch(e)
{
  case bruk;

等等