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

C DLL function got char* parameter and I want to import in C# project

我有一个用 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 可以完成这项工作,但它不起作用。

你试过像这样传递一个字节[]吗:

    byte[] strVersion = new byte[256];

    DllSolderMask.AltixDllVersion(strVersion);

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

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

好的,我找到了正确使用 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();

字节数组方式不是动态的,它需要我知道我在数组声明中需要的 space,但它不准确。