在WPF(C#)应用程序中使用C ++ DLL

问题描述 投票:-1回答:1

我正在尝试使用我需要使用的工具制造商提供的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# c++ dll pinvoke dllimport
1个回答
-2
投票

避免在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);  
© www.soinside.com 2019 - 2024. All rights reserved.