繁体   English   中英

pinvoke返回ascii char数组到c#

[英]pinvoke returning ascii char array to c#

我正在用C#编写一个应用程序,该应用程序使用了我使用pinvoke在c中编写的dll。 这是dll的代码:

 __declspec(dllexport) char** foo()
    {
        int i;
        char arr[5]="omer";
        char **str_arr=(char**)malloc(sizeof(char*));
        str_arr[0]=(char*)malloc(sizeof(char)*5);
        strcpy(str_arr[0],arr);
        return str_arr;
    }

这是c#中的代码:

class Program
{

    [DllImport("gg.dll", CallingConvention = CallingConvention.Cdecl)]
    public static unsafe extern char** foo();
    static unsafe void Main(string[] args)
    {
      int  [] arr;
      int i;
    char [] char_arr={'o','m','e','r'};
      string[] string_arr=new string [1];
      char** str_arr;
        str_arr=foo();
        for (i = 0; i < 4; i++)
        {
           char_arr[i]=str_arr[0][i];
        }
        string_arr[0] = new string(st);
        free(*str_arr);
       free(str_arr);
    }
}

现在,当指针返回时,第一个字符数组的内容是乱码(中文字符)而不是“ omer”,为什么呢?

我认为可能是因为c#中的char数组可能使用unicode编码,但是当我在调用函数foo后更改它之前测试char_arr中内容的值时,它表示ASCII中的字母

您的C代码使用单字节字符,而C#代码需要16位双字节字符。

看看一个相关的问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM