目的是为了通过非托管函数处理字符串,然后返回处理结果!原函数:extern "C" void __declspec(dllexport) Test(char* testData ,char* testDAta1)
{
testData = "ABCDEFG!";
testData1 = "POIUYT"!
}
C#调用:[DllImport("GprsApplication.dll", EntryPoint = "Test")]
public static extern void Test(ref StringBuilder a ,ref StringBuilder b);
private void button_Test_Click(object sender, EventArgs e)
{
StringBuilder a = new StringBuilder("12345");
StringBuilder a = new StringBuilder("67890");
Test(ref a , ref b);
label.Text = a.ToString();
}错误结果 :a和b的值还是“12345”和“67890”。而我希望应该是“ABCDEFG”和“POIUYT”。
{
testData = "ABCDEFG!";
testData1 = "POIUYT"!
}
C#调用:[DllImport("GprsApplication.dll", EntryPoint = "Test")]
public static extern void Test(ref StringBuilder a ,ref StringBuilder b);
private void button_Test_Click(object sender, EventArgs e)
{
StringBuilder a = new StringBuilder("12345");
StringBuilder a = new StringBuilder("67890");
Test(ref a , ref b);
label.Text = a.ToString();
}错误结果 :a和b的值还是“12345”和“67890”。而我希望应该是“ABCDEFG”和“POIUYT”。
StringBuilder换成string
1、数值型直接用对应的就可。(DWORD -> int , WORD -> Int16)
2、API中字符串指针类型 -> .net中string
3、API中句柄 (dWord) -> .net中IntPtr
4、API中结构 -> .net中结构或者类。注意这种情况下,要先用StructLayout特性限定声明结构或类
{
sprintf(temp1,"");
sprintf(temp2,"");
}调用时,只要用StringBuilder申明对象就可以了,不用ref(测试通过)
{
strcpy(testData, "ABCDEFG!");
strcpy(testData1, "POIUYT");
}