我正在为我大学的化学系编写一个程序,其中包含三个独立的设备——一个力传感器、一个 Z 轴纳米定位器平台和一个 XYZ 轴微型运动平台。我必须将这三个设备合并到一个程序中,并让它们相互通信。我已经成功地整合了力传感器和 Z 轴平台。它们都带有为 C# 准备的 DLL。由于我正在编写一个 GUI 程序并且我已经相当熟悉 C#,因此这是自然的选择。
但是,XYZ 平台的 DLL 是为 C++ 编写的。我不确定如何让这个 DLL 在我的程序中工作。我无法在 Visual Studio 中添加对它的引用,因为它不兼容,并且它附带的暴露 DLL 中的函数的头文件是为 C++ 编写的。
我对这个过程有一个基本的了解。在 ldcncom.h 头文件中,有一个函数是这样写的:
DLLENTRY(int) LdcnInit(char *portname, unsigned int baudrate);
我在我的 C# 程序中将其重写为:
[DllImport("Ldcnlib.dll", EntryPoint = "LdcnInit")]
public static extern int LdcnInit(char[] portname, uint baudrate);
我不确定这是否正确,但它“工作”,因为它能够从 DLL 读取函数并执行它的职责......只是不完全正确,因为它仍然缺少所有其他函数。
但我不知道如何做剩下的。例如,在 sio_util.h 中,有一个返回类型为 HANDLE 的函数,另一个返回类型为 DWORD 的函数,我对这些不是很熟悉,也不知道如何使其在 C# 中工作。
我听说过诸如互操作、包装器、C++/CLI 之类的东西,但目前这有点超出我的理解(对所有这些来说仍然有些新),所以任何关于如何执行此过程的建议都会很棒。
谢谢你。