Member 14087451 Ответов: 1

Проблема в использовании PInvoke структура в C#


я хочу, чтобы вызов PInvoke на C структура в C#
мой с структура

 typedef struct
{
	u64 Parent;					// index in the folders list
	u64 FileSize;					// file size
	u64 Delta;					// delta offset on drive
	FILETIME Modified;					// modified time
	FILETIME Created;					// created time
	FILETIME Accessed;					// accessed time
	u16 *NameExtStr;					// name of file
	u16 *PartitionStr;				// partition or drive name
	u16 *CommentStr;		// if not null then comment about file state
	size_t OverwrittenIndex;	// index of file that overwritten this file
	u64 LostCluster[LOST_COUNT];		// overwritten clusters #
	u64 LostClusters;					// lost clusters count
	u64 TotalClusters;					// total file clusters
	u8 Exists:1;						// file existence flag
	u8 State:5;						// state of file
	u16 Hidden:1;
	u8 FoundByDeepScan:1;			// tells if file found by deep scan
	u8 Attr;							// attribute
}
FileInfoStruct;

и мой код на языке Си

 typedef void *myHandle;
// returns file info for one of found files found, Idx - index of file of interest
BOOL GetFileInfoNew(myHandle Undelete, size_t Idx, FileInfoStruct **FileInfo, FileDetailsStruct *FileDetails)
{
	UndeleteStruct *UndeletePtr = (UndeleteStruct *)Undelete;
	
	

	*FileInfo = &UndeletePtr->Search.FilesList.FilesPtr[Idx].fi;						// return file description
	FileDetails[0].FileSize=(*(*FileInfo)).FileSize;

	FileDetails[0].ParentID = (*(*FileInfo)).Parent;

	wcscpy(FileDetails[0].FileName, (*(*FileInfo)).NameExtStr);

	wcscpy(FileDetails[0].PathName,(*(*FileInfo)).PartitionStr);

	
	return TRUE;
}


плз помогите

Что я уже пробовал:

мой на C# структура

[StructLayout(LayoutKind.Sequential)]
    public struct FileInfoStruct
    {

        public ulong Parent;
        public ulong FileSize;
        public ulong Delta;
        public FILETIME Modified;
        public FILETIME Created;
        public FILETIME Accessed;
        public IntPtr NameExtStr;                    // name of file
        public IntPtr PartitionStr;                  // partition or drive name
        public IntPtr CommentStr;         // if not null then comment about file state
        public int OverwrittenIndex;
        public ulong[] LostCluster;        // overwritten clusters #
        public ulong TotalClusters;            //u64 LostClusters;                   
        public int Exists;                                                           
        public int State;                                                               					
        public int Hidden;  					
        public int FoundByDeepScan; 
        public int Attr;
        
    }

мой код c#

GetFileInfoNew(IntPtr Undelete, uint Idx, ref  FileInfoStruct FileInfo, ref FileDetailsStruct FileDetails)

Richard MacCutchan

В чем же вопрос?

Member 14087451

сэр iam сталкивается с проблемой pinvoke c code to c#, моя структура остается нулевой, она работает правильно в c, но я не получаю значения в c#

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.

1 Ответов

Рейтинг:
7

Richard MacCutchan

BOOL GetFileInfoNew(myHandle Undelete, size_t Idx, FileInfoStruct **FileInfo, FileDetailsStruct *FileDetails)

Я не думаю, что с помощью ref ключевое слово в C# приводит к двойной косвенности в C.


Member 14087451

вы правы, я изменил Реф FileInfoStruct до указателя IntPtr Реф решить мою проблему спасибо :)