我正在攻读化学博士学位,因此我需要编写一个软件应用程序来帮助我在显微镜下对样品进行成像。该显微镜配有 xyz 纳米定位台。该阶段由硬件供应商使用 VC++ 编写的非托管 DLL 控制。我可以为您提供更多需要的细节,但让我从这个开始;
dll 中的一种方法允许我读取运动轴的设置:
C++ 语法:
BOOL E7XX_qSVO (int ID, const char* szAxes, BOOL* pbValueArray)
根据惯例,BOOL 是 int 0 或 1。
我的 C# 包装器包含:
[DllImport("E7XX_GCS_DLL.dll", EntryPoint = "E7XX_qSVO")]
public static extern int qSVO(int iId, string sAxes, int []iValArray);
这对我来说似乎是正确的。但是,当我在我的主应用程序中尝试这样的事情时(查询轴 1,2 和 3):
Int32 [] _iValues = new Int32[3];
E7XXController.qSVO(m_iControllerID, "123", _iValues);
我一直得到这样的数组:
{6, 0, 10} 而根据设备本身的显示我应该得到 {0, 0 , 0} 。互补功能:
BOOL E7XX_SVO (int ID, const char* szAxes, const BOOL* pbValueArray)
在舞台上设置相同的状态位也不起作用......
dll 中的其他命令运行良好。我可以毫无问题地传入和传出字符串和双打,但不是 BOOL 类型......
你们知道可能出了什么问题吗?