1以后碰到问题直接搜索错误提示,不要瞎几把找,排查了半天最后发现是64位的问题,还是回头来搜错误提示
opencv 用的是64位的,c# 属性生成的是anycpu的,所以会导致 试图加载格式不正确的程序,还一直以为是dll的问题,直接搜错误提示不香吗,解决问题的方法比解决问题更重要
2创建了一个win32 的dll ,dll依赖的其他dll却用的64,会导致生成失败,会存在即是加了lib还是提示链接失败,如果如果下次加了lib还提示链接缺少function,就要注意是不是64位的。
3如果是只需要传递string ,c# 这边直接用string就可以了,c++ 用const char*
4 如果返回结构体 c# 要这样申明,调用记得传入ref,不知道为什么out也可以,头疼
[StructLayout(LayoutKind.Sequential)]
public struct CPoint
{
public int x;
public int y;
//如果要字符串,就可以用这句先分配一点内存
// [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
// public string szVersion;
}
5如果模块在c# 目录下来 ,还是提示找不到模块,那就是因为dll依赖的其他dll没有放到当前目录