调用C的dll函数,传英文时没问题,但是一旦有中文就报错,
错误信息是:"传递给系统调用的数据区域太小。 (异常来自 HRESULT:0x8007007A)"
dll中C代码__declspec(dllexport) int __stdcall TestStringArray(char** key, char** value, int len)
{
return 1;
}
[DllImport("Test.dll")]
public static extern bool TestStringArray(String[] key, String[] value, int len);
//winform程序,在窗体加载事件中测试
private void UlsiForm_Load(object sender, EventArgs e)
{
int count = 2;
string[] keys,values;
keys = new string[count];
keys[0] = "中文测试";//现这里错误,如果改为英文就没问题了
keys[1] = "bbbbbb";
values = new string[count];
values[0] = "111111";
values[1] = "222222";
bool isOK = UlsiDll.TestStringArray(keys, values, count);
}
错误信息是:"传递给系统调用的数据区域太小。 (异常来自 HRESULT:0x8007007A)"
dll中C代码__declspec(dllexport) int __stdcall TestStringArray(char** key, char** value, int len)
{
return 1;
}
[DllImport("Test.dll")]
public static extern bool TestStringArray(String[] key, String[] value, int len);
//winform程序,在窗体加载事件中测试
private void UlsiForm_Load(object sender, EventArgs e)
{
int count = 2;
string[] keys,values;
keys = new string[count];
keys[0] = "中文测试";//现这里错误,如果改为英文就没问题了
keys[1] = "bbbbbb";
values = new string[count];
values[0] = "111111";
values[1] = "222222";
bool isOK = UlsiDll.TestStringArray(keys, values, count);
}
没有问题。
现在解决了,
把string[]换成StringBuilder[]问题解决。
不过不知道是因为什么,也知道谁能给解释一下。