Я должен извлечь пользовательский ресурс из разных файлов EXE и DLL.Ресурс содержит информацию о версии, которую мне нужно сохранить, и которую я смогу отобразить позже, но данные не сохраняются в ресурсе стандартной версии.Автор файлов написал код для извлечения необходимых данных, но исходный код написан на C #.У меня есть исходный код исходного автора для извлечения необходимого ресурса, но я не могу понять, как повторить процесс в PHP.
Вот код C #, используемый для извлечения необходимой информации из ресурса:
static void Main(string[] args) {
System.IntPtr moduleHandle = LoadLibraryEx(@"C:\examplefile.exe", IntPtr.Zero, LoadLibraryFlags.LOAD_LIBRARY_AS_DATAFILE);
if (moduleHandle != IntPtr.Zero) {
System.IntPtr hrsrc = FindResource(moduleHandle, (IntPtr)7777, "FILES");
System.IntPtr hglob = LoadResource(moduleHandle, hrsrc);
System.IntPtr rdata = LockResource(hglob);
byte[] m_pBytes = new byte[6];
Marshal.Copy(rdata, m_pBytes, 0, 6);
int vv1 = m_pBytes[0];
int vv2 = m_pBytes[1];
int v1 = vv1 * 256 + vv2;
int v2 = m_pBytes[2];
int v3 = m_pBytes[3];
vv1 = m_pBytes[4];
vv2 = m_pBytes[5];
int v4 = vv1 * 256 + vv2;
FreeLibrary(moduleHandle);
Console.WriteLine(string.Format("{0}.{1}.{2}-{3}", v3, v2, v1, v4));
}
}
Я застрял в строке: System.IntPtr hrsrc = FindResource (moduleHandle, (IntPtr) 7777, "FILES");
Я не могу точно понять, что происходит на этом этапе,Похоже, что указатель на ресурс возвращается, но я не знаю, как повторить это в PHP.Документация Microsoft для findResource недостаточно детальна, чтобы я мог определить, что происходит внутри.
Я использовал ResourceHacker для просмотра всех ресурсов в файле, а ресурс типа FILES отображается с записью с именем7777. Я вижу двоичные данные, содержащиеся в ресурсе, и вижу, как они используются для получения результата в коде выше.Чего мне не хватает, так это способа поиска и извлечения ресурса по типу с использованием PHP.
Я был бы очень признателен, если бы кто-то смог пролить свет на это и помочь мне.
AЧистое решение PHP было бы лучше, потому что наши серверы сейчас являются машинами Windows, но мы планируем перейти на Linux, поэтому решение, которое работает на обеих платформах, идеально.