我使用P / Invoke与设备连接。但我一直在调用以下方法:
BOOL __stdcall voGetFirmwareVersion(IN OUT LPTSTR lpVersion, IN OUT DWORD *dwSize);
在我的包装器中,我调用了这样的方法:
[DllImport(DLL_LOCATION, CharSet = CharSet.Ansi)]
private static extern Boolean voGetFirmwareVersion(string s, uint d);
我试图将输入更改为Out / Ref并尝试添加[In,Out]属性,但我不断获得AccessViolation异常。谁能指出我正确的方向?我已经在这里待了几个小时了,谷歌还没能把我直接放
答案 0 :(得分:3)
dwSize
按地址传递,因此它应为ref
参数。BOOL
返回类型进行封送处理Ansi
字符集。试试Auto
或Unicode
。LPStr
和StdCall
不是必须的,它们是默认设置。所以试试这个:
[DllImport(DLL_LOCATION, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool voGetFirmwareVersion([MarshalAs(UnmanagedType.LPTStr)] string s, ref uint d);