1未将对象引用到实例。
接口函数的参数不对。解决办法【用fixed去限制数组长度】
unsafe public struct VCI_BOARD_INFO
{
public UInt16 hw_Version;
public UInt16 fw_Version;
public UInt16 dr_Version;
public UInt16 in_Version;
public UInt16 irq_Num;
public byte can_Num;
public fixed byte str_Serial_Num[20];
public fixed byte str_hw_Type[40];
public fixed byte Reserved[8];
}
2试图加载格式不正确的程序。
CPU类型选X64或X86【二选一】
另外dll文件放入Debug文件内。
3 函数无反应【软件闪退】
函数的参数不对。
不可以将byte数组改char数组,【因为影响到函数签名了。】
4万能参数:
只要是参数就会占用bit
万能参数
public struct VCI_BOARD_INFO //主板信息
{
bool i;
}
public struct VCI_BOARD_FIND2 //主板信息
{
byte i;
}
然后用这个参数去测试接口函数。
5尝试读取或写入受保护的内存:
原因:接口函数的参数错误【需要定义正确的参数】
6获取DLL文件函数名:
在C#中,可以使用反射机制获取DLL文件中的所有函数名。具体步骤如下:
1.使用Assembly类的LoadFile方法加载DLL文件,获取Assembly对象。
2.使用Assembly对象的GetTypes方法获取DLL文件中所有的类型。
3.遍历所有类型,使用Type对象的GetMethods方法获取该类型中的所有方法。
4.遍历所有方法,使用MethodInfo对象的Name属性获取方法名。
以下是获取DLL文件中所有函数名的示例代码:
using System;
using System.Reflection;
namespace GetFunctionsFromDll
{
class Program
{
static void Main(string[] args)
{
// 加载DLL文件
Assembly assembly = Assembly.LoadFile(@"D:\Test.dll");
// 获取所有类型
Type[] types = assembly.GetTypes();
// 遍历所有类型
foreach (Type type in types)
{
// 获取该类型中的所有方法
MethodInfo[] methods = type.GetMethods();
// 遍历所有方法
foreach (MethodInfo method in methods)
{
// 输出方法名
Console.WriteLine(method.Name);
}
}
}
}
}