搞了一天了 郁闷啊 高手门帮个忙把
我是用C#调用C++写的一个DLL
HC.DLL 就一个函数 int GetHashCode(WCHAR *pFullPathFileName, WCHAR pOutHashCode);
我在C#中是这么定义的
public static extern int GetHashCode([In, MarshalAs(UnmanagedType.LPWStr)] string lpFullPathFileName, [MarshalAs(UnmanagedType.LPWStr)] ref String lpOutHashCode);
可是老报异常 我要是把第二个参数的REF去掉就没事了 可是第二个参数是我要得到数值的 请高手门帮帮忙吧
------解决方案--------------------改成out试试
------解决方案--------------------“PInvoke 签名与非托管的目标签名不匹配”
这样不对,增加了REF说明参数类型不匹配。
是不是应该:int GetHashCode(WCHAR *pFullPathFileName, WCHAR *pOutHashCode);
------解决方案--------------------给你一个例子:
原型:
This function reads a BYTE/WORD/DWORD value from an I/O port.
bool _stdcall GetPortVal(
WORD wPortAddr,
PDWORD pdwPortVal,
BYTE bSize
);
Parameters
wPortAddr
[in] I/O port address
pdwPortVal
[out] Pointer to a DWORD variable that receives the value obtained from the port.
bSize
[in] Number of bytes to read.
Can be 1 (BYTE), 2 (WORD) or 4 (DWORD).
Return Values
If the function succeeds, the return value is true. Otherwise, the function returns false.
C#中调用的
/// <summary>
/// This function reads a BYTE/WORD/DWORD value from an I/O port.
/// </summary>
/// <param name= "wPortAddr "> [in] I/O port address </param>
/// <param name= "pdwPortVal "> [out] Pointer to a DWORD variable that receives the value obtained from the port. </param>
/// <param name= "bSize "> [in] Number of bytes to read. Can be 1 (BYTE), 2 (WORD) or 4 (DWORD). </param>
/// <returns> If the function succeeds, the return value is true. Otherwise, the function returns false. </returns>
[DllImport( "WinIo.dll ", EntryPoint = "GetPortVal ")]
private static extern bool GetPortVal(UInt16 wPortAddr, [MarshalAs(UnmanagedType.U4)] out UInt32 pdwPortVal, byte bSize);