c#字符串到非托管的c++dll

本文关键字:c++dll 字符串 | 更新日期: 2023-09-27 18:20:55

我需要写一些类似的东西

switch (nameOfType) 
{
  case "burk":
    return "zzzz";

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

其中nameOfType是来自c#的字符串(通过DLLImport)但我对c++很陌生——我必须用什么类型的字符串在c++中操作,就像在c#中一样?

c#字符串到非托管的c++dll

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类。它支持正常的搜索、比较、插入和子字符串操作。

不能像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;

等等