C DLL函数得到了char *参数,我想在C#项目中导入

时间:2018-04-06 14:00:08

标签: c# pinvoke dllimport

我在C中写了一个DLL,我想导出函数:

__declspec( dllexport ) int GetDllVersion(char *Version);

我有

class DllSolderMask
{
     [DllImport("Dll.dll", CharSet=CharSet.Ansi)]
     public static extern int GetDllVersion(ref string version);
}

static void Main(string[] args)
{
        string strVersion;

        DllSolderMask.AltixDllVersion(ref strVersion);

        Console.WriteLine(strVersion.ToString());
}

char * Version 显然是一个角色的数组,所以 ref string strVersion 可以完成这项工作,但它不起作用。

2 个答案:

答案 0 :(得分:0)

好的,我发现了如何正确使用StringBuilder:

[DllImport("AltixDll.dll", CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public extern static int AltixDllVersion([MarshalAs(UnmanagedType.LPStr)] StringBuilder DllVersion);

StringBuilder str = new StringBuilder();
DllSolderMask.AltixDllVersion(str);
lblDll.Text = str.ToString();

字节数组的方式不是动态的,它要求我知道我的数组声明中需要的空间,并且它不准确。

答案 1 :(得分:-1)

您是否尝试传递这样的字节[]:

    byte[] strVersion = new byte[256];

    DllSolderMask.AltixDllVersion(strVersion);

    string myString = System.Text.Encoding.Default.GetString(strVersion);
    Console.WriteLine(myString);

我认为从C ++的角度来看,char *只是一个指向8位条目数组的指针。