我在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 可以完成这项工作,但它不起作用。
答案 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位条目数组的指针。