我正在尝试从 LabVIEW 中生成的 DLL 调用函数。我认为这将比事实证明要简单得多。功能描述如下:
void __cdecl Device_Init(char DevName[]);
因此,在我的 C# 代码中,我正在尝试以下操作:
[DllImport(@"Device.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern void Device_Init(StringBuilder name);
我通过简单地使用以下命令在我的应用程序中调用它:
StringBuilder devName = new StringBuilder(DeviceName);
Device_Init(devName);
我没有在我的设备上进行任何初始化,而是看到弹出一个 LabVIEW vi 窗口,其标题类似于 dll 中的不同方法(即 AF1_GetPressure.vi)。然后应用程序挂起,弹出这个 LabVIEW 窗口,我必须退出调试会话。
我想我的问题是我的函数签名如何可能是错误的......我使用了 StringBuilder,因为我在 NI 网站上找到了一个示例,该示例似乎表明 LabVIEW 需要此变量类型来更好地确定数组中的字符数。http://www.ni.com/example/31050/en/
我尝试了各种不同的参数类型组合,但我似乎无法让它工作。如果我尝试从 C++ 调用 dll,那么我可以让事情正常工作。虽然奇怪的是,我不得不在 C++ 中动态加载 dll,因为当我尝试使用应用程序加载它时遇到 dll 初始化失败。
任何帮助将不胜感激!