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,但它不准确。
我有一个用 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,但它不准确。