在C++里面的定义是
extern "C" __declspec(dllimport) bool Usb_Qu_write(byte Qu_index, char Qu_type, char *pData);
我现在要在C# 里面用要怎么改啊。
我弄成public static extern bool Usb_Qu_write(byte Q_index, byte Q_type, byte pQ_data); 
然后报错“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”
大家帮下忙。

解决方案 »

  1.   

    使用之前定义一个byte[] data数组。
    public static extern bool Usb_Qu_write(byte Q_index, byte Q_type, byte[] pQ_data);
    使用Usb_Qu_write(,,data);
      

  2.   

    c#里面也有指针,你也可以直接用unsave传byte指针也就行了。
      

  3.   

    UnmanagedFunctionPointerAttribute 如果不是 __stdcall 需要指定这个。
    因为 C# 缺省是 __stdcall。还有就是最后一个参数的问题。
    这个要看char* 参数是什么。
    如果是传入的字符串,那么使用 string,否则使用 StringBuilder.
    如果是传入的字符引用,那么使用 ref 修饰。C# 平台封送很复杂,不是简单就能看出的。
    C++ 的接口不是仅仅一个 函数签名,还有参数契约。