Как я могу импортировать функцию DLL C++ с помощью p / invoke в C#?
у меня есть эта функция в c++, которая определена в заголовочном файле
MYDLL_API BOOL GetFolderSize(LPCTSTR lpszStartFolder, BOOL bRecurse, BOOL bQuickSize, PLARGE_INTEGER lpFolderSize, LPDWORD lpFolderCount /*= NULL*/, LPDWORD lpFileCount /*= NULL*/);
где MYDLL_API определяется как
#ifdef MYDLL_EXPORTS #define MYDLL_API __declspec(dllexport) #else #define MYDLL_API __declspec(dllimport) #endif
после компиляции его как 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);
во время выполнения он не выдал исключения, но вернул false (означает, что функция не удалась )
Почему? является ли причина из-за сложного типа данных в c++ (PLARGE_INTEGER)
или что ??
спасибо
Что я уже пробовал:
я должен попробовать это
[StructLayout(LayoutKind. Explicit, Size = 8)]
структуру 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,
боол bRecurse,
bQuickSize типа bool ,
out LARGE_INTEGER lpFolderSize,
из тип uint32 lpFolderCount,
из тип uint32 lpFileCount);
Richard MacCutchan
Единственный способ узнать ответ - это использовать отладчик. Мы не знаем, какие значения вы передаете функции и почему она возвращает false.