我正在尝试从我的C#应用程序中访问显微镜。该SDK是用C++编写的,由于它们是非托管代码,我无法将Dlls添加为我的应用程序的引用。
因此,我发现我需要使用DllImport来使用C#函数。
不幸的是,这似乎超出了我的能力范围。
以下是一些C++代码示例(从SDK中包含的示例应用程序):
并且这是稍后使用的方式:
我该如何将这个转换为C#代码?我已经尝试过类似于以下的代码:
因此,我发现我需要使用DllImport来使用C#函数。
不幸的是,这似乎超出了我的能力范围。
以下是一些C++代码示例(从SDK中包含的示例应用程序):
interface Camera;
typedef Camera * CameraHandle;
struct CameraInfo
{
wchar_t camera_name[64]; // camera head type
wchar_t controller_name[64]; // controller type
wchar_t firmware_version[64]; // firmware version
long lib_id; // library ID
long controller_id; // controller ID
long camera_id; // camera ID
CameraHandle handle; // handle to opened camera
long status; // status (0 = available)
CameraInfo()
{
memset(this,0,sizeof(*this));
}
};
typedef struct CameraInfo CameraInfo;
CamDiscoverCameras(OUT const struct CameraInfo ** info, OUT long * count);
并且这是稍后使用的方式:
CamResult result; //enum CamResult{...}
const CameraInfo* camera_info = NULL;
long camera_count = 0, pre_lib_id, pre_controller_id;
result = CamDiscoverCameras(&camera_info, &camera_count);
我该如何将这个转换为C#代码?我已经尝试过类似于以下的代码:
[StructLayout(LayoutKind.Sequential)]
struct CameraInfo
{
string camera_name; // camera head type
string controller_name; // controller type
string firmware_version; // firmware version
int lib_id; // library ID
int controller_id; // controller ID
int camera_id; // camera ID
public IntPtr handle; // handle to opened camera
int status; // status (0 = available)
}
[DllImport("Cam.dll", EntryPoint = "CamDiscoverCameras")]
但基本上我不知道自己在做什么,也不知道下一步应该做什么(例如如何定义函数、如何处理C++代码中的“interface”、结构体是否转换正确等等)。