我正在尝试使用我需要使用的工具制造商提供的DLL编写WPF(C#)应用程序。DLL是用C ++编写的。可以在here中找到DLL以及一些文档。这是我所做的测试:
[DllImport("usb2can.dll", CharSet = CharSet.Ansi, EntryPoint = "CanalOpen")]
public static extern Int32 CanalOpen([MarshalAs(UnmanagedType.LPStr)] string pConfigStr, Int32 flags);
[DllImport("usb2can.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int CanalGetVersion();
[DllImport("usb2can.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int CanalGetDllVersion();
现在,当我调用该方法时,它们都返回0或NULL。我是在做错什么,还是无法在C#中使用此DLL?
避免在C#程序和dll之间传递对象。使用POD:从以下位置更改函数的原型:
public static extern Int32 CanalOpen([MarshalAs(UnmanagedType.LPStr)] string pConfigStr, Int32 flags);
收件人:
public static extern Int32 CanalOpen(char[] pConfigStr, Int32 flags);
并在C#代码中使用类似的代码:
string c = "myconfig";
int iFlag = 0;
char[] char_arr = c.ToCharArray();
int iResult = CanalOpen(char_arr, iFlag);