所以,这个问题已经出现了很多变种,在看了几个后我仍然无法弄明白.
这是C代码:
typedef struct
{
unsigned long Identifier;
char Name[128];
} Frame;
Frame GetFrame(int index);
Run Code Online (Sandbox Code Playgroud)
这是C#代码:
struct Frame
{
public ulong Identifier;
[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.I1, SizeConst = 128)]
public char[] Name;
}
[DllImport("XNETDB.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
private static extern Frame GetFrame(int index);
Run Code Online (Sandbox Code Playgroud)
这是我在C#中尝试过的最后一次尝试,看起来非常符合逻辑,但我得到的错误是"方法的签名与PInvoke不兼容".所以,我有点迷失下一步的尝试.任何帮助表示赞赏.
谢谢,凯文
Kevin 更新了这个作为我的答案的编辑
我应该改变我的C代码:
void GetFrame(int index, Frame * f);
Run Code Online (Sandbox Code Playgroud)
并使用C#代替:
struct Frame
{
public uint Identifier;
[MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 128)]
public string Name;
}
[DllImport("XNETDB.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] …Run Code Online (Sandbox Code Playgroud) 我刚刚开始尝试使用OpenCV.我有一个静态位置的LCD设置,我想从图像中提取屏幕上显示的内容.我已经看到用于校准相机的棋盘图案,但似乎这用于不影响图像,这不完全是我想要做的.
我想我会在液晶显示屏上显示棋盘,然后找出将液晶显示屏的图像转换成直接在头顶和裁剪的棋盘理想视图所需的转换.然后我会存储转换,更改LCD显示的内容,拍照,执行相同的转换,并获得现在正在显示的内容的理想视图.
我想知道这听起来是个好主意吗?有没有更简单的方法来实现我想要做的事情?关于函数的任何提示我应该用来计算转换,执行它们,存储它们(可能只是将转换矩阵保存在内存中或将它们写入文件中)等等?
我无法使用远程计算机上的C#连接到我的mysql服务器.我知道服务器正在运行,因为我可以通过phpmyadmin访问所有表.我在服务器上关闭了防火墙,我为任何主机配置了用户,连接字符串的格式为:
Server=ip address;Uid=user;Pwd=password;Database=db name;
Run Code Online (Sandbox Code Playgroud)
但是当我为SqlConnection对象调用Open方法时,我得到一个普通服务器无法找到错误,它显然只是按方法所花费的时间超时.我不知道我是否错过了mysql服务器的一些配置,我真的不知道下一步该尝试什么...