我想用C++函數的代碼到.NET代碼我不能使用pinvke
MYDLL_API BOOL GetFolderSize(LPCTSTR lpszStartFolder,
BOOL bRecurse,
BOOL bQuickSize,
PLARGE_INTEGER lpFolderSize,
LPDWORD lpFolderCount /*= NULL*/,
LPDWORD lpFileCount /*= NULL*/);
,所以我創建DLL導出代碼 然後在C#代碼中使用的PInvoke導入C++ DLL函數,C#
[StructLayout(LayoutKind.Explicit, Size = 8)]
struct LARGE_INTEGER
{
[FieldOffset(0)]
public Int64 QuadPart;
[FieldOffset(0)]
public UInt32 LowPart;
[FieldOffset(4)]
public Int32 HighPart;
}
[DllImport("mydll.dll")]
extern static bool GetFolderSize(string lpszStartFolder,
bool bRecurse,
bool bQuickSize,
out LARGE_INTEGER lpFolderSize,
out UInt32 lpFolderCount,
out UInt32 lpFileCount);
這是什麼錯?
但是當我打電話它給我運行時異常 調用PInvoke函數'dublication!dublication.Form1 :: GetFolderSize'已經不平衡堆棧。這很可能是因爲託管的PInvoke簽名與非託管目標籤名不匹配。檢查的PInvoke簽名的調用約定和參數相匹配的非託管的目標籤名
PLARGE_INTEGER和LPDWORD應該是'IntPtr',不是嗎? –
我嘗試並重試這種方法,但它沒有工作,並且拋出了相同的異常 –
@EdPlunkett「out」將已經添加指針。 –