usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Runtime.InteropServices;usingSystem.Text;usingSystem.Threading.Tasks;namespaceDotNet_Use_C_Demo
{public classTestCMethodHelper
{
[DllImport("CDLLDemo.dll", CallingConvention = CallingConvention.Cdecl, CharSet =CharSet.Auto)]private static extern int ParseBaliseMsg2(string msg, string rmsg, ref bytememory);
[DllImport("CDLLDemo.dll", CallingConvention = CallingConvention.Cdecl, CharSet =CharSet.Auto)]private static extern IntPtr ParseBaliseMsg3(string msg, string rmsg, ref intrInt);
[DllImport("CDLLDemo.dll", CallingConvention = CallingConvention.Cdecl, CharSet =CharSet.Auto)]private static extern IntPtr ParseBaliseMsg4(string msg, stringrmsg, [MarshalAs(UnmanagedType.LPStr)]StringBuilder t);
[DllImport("CDLLDemo.dll", CallingConvention = CallingConvention.Cdecl, CharSet =CharSet.Auto)]private static extern IntPtr ParseBaliseMsg5([MarshalAs(UnmanagedType.LPStr)]StringBuilder msg, stringrmsg, [MarshalAs(UnmanagedType.LPStr)]StringBuilder t);
[DllImport("CDLLDemo.dll", EntryPoint = "strcpyTest", CallingConvention = CallingConvention.Cdecl/*, CallingConvention = CallingConvention.Cdecl*/)]public static extern IntPtr strcpyTest(ref byte destA, stringsourA);public static voidTestMethod()
{
Byte[] bPara= new Byte[100]; //新建字节数组
var r2 = ParseBaliseMsg2("abcd", "", ref bPara[0]);string strGet = System.Text.Encoding.Default.GetString(bPara, 0, bPara.Length); //将字节数组转换为字符串
Console.WriteLine("返回值:" +r2);
Console.WriteLine("传出值:" +strGet);
Console.WriteLine("***************************************************");int retResult = 0;
IntPtr pRet= ParseBaliseMsg3("1234", "", refretResult);string strRet =Marshal.PtrToStringAnsi(pRet);
Console.WriteLine("返回值:" +strRet);
Console.WriteLine("传出值:" +retResult);
Console.WriteLine("***************************************************");//StringBuilder方式
StringBuilder sb = newStringBuilder();var r4 = ParseBaliseMsg4("abcd", "", sb);
Console.WriteLine("返回值:" +r4);
Console.WriteLine("传出值:" +sb.ToString());
Console.WriteLine("***************************************************");
StringBuilder sb5= newStringBuilder();
StringBuilder sb5E_para= newStringBuilder();
sb5E_para.Append("abcdedf123456");var r5 = ParseBaliseMsg5(sb5E_para, "", sb5);
Console.WriteLine("返回值:" +r5);
Console.WriteLine("传出值:" +sb5.ToString());
}public static voidCpyTest()
{string strSour = "测试调用C++ dll";
Byte[] bPara= new Byte[100]; //新建字节数组
IntPtr pRet= strcpyTest(ref bPara[0], strSour);string strGet = System.Text.Encoding.Default.GetString(bPara, 0, bPara.Length); //将字节数组转换为字符串
string strRet =Marshal.PtrToStringAnsi(pRet);
Console.WriteLine("源字符串:");
Console.WriteLine(strSour);
Console.WriteLine("传出值:");
Console.WriteLine(strGet);
Console.WriteLine("返回值:");
Console.WriteLine(strRet);
}
}
}