好的,还有一个功能,它还没有工作。我基本上是通过使用P / Invoke从C#调用一些C ++函数的。有问题的功能确实会向演出激光设备查询一些与设备有关的信息,例如最小和最大扫描速率以及每秒最大点数。
有问题的功能是:
int GetDeviceInfo(DWORD deviceIndex, DeviceInfo* pDeviceInfo);
这是我得到的C ++头文件。这是非常简短的C ++ SDK描述的链接。我没有重建DLL文件的源,也没有* .pdb文件(制造商无法提供):
#pragma once
#ifdef STCL_DEVICES_DLL
#define STCL_DEVICES_EXPORT extern "C" _declspec(dllexport)
#else
#define STCL_DEVICES_EXPORT extern "C" _declspec(dllimport)
#endif
enum SD_ERR
{
SD_ERR_OK = 0,
SD_ERR_FAIL,
SD_ERR_DLL_NOT_OPEN,
SD_ERR_INVALID_DEVICE, //device with such index doesn't exist
SD_ERR_FRAME_NOT_SENT,
};
#pragma pack (1)
struct LaserPoint
{
WORD x;
WORD y;
byte colors[6];
};
struct DeviceInfo
{
DWORD maxScanrate;
DWORD minScanrate;
DWORD maxNumOfPoints;
char type[32];
};
这是我当前正在使用的完整C#测试代码。除以下功能外,所有功能均正常运行
第64行(cp屏幕截图):
int r4 = GetDeviceInfo(0, ref pDevInfo);
我收到以下错误:
An unhandled exception of type 'System.NullReferenceException' occured in MonchaTestSDK.exe
Additional information: Object reference not set to an instance of an object
这是堆栈跟踪(如果没有DLL的* .pdb文件,就无法提供更好的堆栈跟踪):
MonchaTestSDK.exe!MonchaTestSDK.Program.Main(string [] args)第73行+ 0xa字节C#mscoreei.dll!73a8d91b()
[下面的帧可能不正确和/或丢失,没有为mscoreei.dll加载任何符号]
mscoree.dll !73cae879()
mscoree.dll!73cb4df8()
kernel32.dll!74a08654()
ntdll.dll!77354b17()
ntdll.dll!77354ae7()
一些拆卸:
int r4 = GetDeviceInfo(0, ref pDevInfo);
05210749 int 3
0521074A push ebp
0521074B cwde
0521074C xor ecx,ecx
0521074E call 0521011C
05210753 int 3
05210754 test dword ptr [eax-1],edx
05210757 ?? ??
05210758 dec dword ptr [ebx-0AF7Bh]
0521075E dec dword ptr [ecx-6F466BBBh]
知道我在这里做错了吗?
ABOUTYOU
相关分类