FindResource() fehlschlägt, Daten zu finden, obwohl die Daten in der exe

Ich habe alle über diese eine, und ich bin einfach nur plumb stecken. Ich habe ein Projekt erstellen und ich möchte einbetten einer text-Datei als Ressource in die ausführbare Datei. Ich verstehe die Grundlagen von, wie dieses "soll" funktionieren, aber aus irgendeinem Grund ist es nicht. Also, lassen Sie mich beginnen, was ich habe, so weit und vielleicht kann das problem fixiert werden.

Es gibt zwei Funktionen, hier die erste, EnumResNameProc war ein Versuch zu Debuggen, das problem ist mein selbst, die zweite, LoadFileInResource ist die Funktion, die ich versuche, zu arbeiten.
Es ist ein wenig chaotisch, denn ich war in der Mitte des Gebäudes, wenn ich Start Probleme.

Die genaue Problem ist, FindResourceExA wird NULL zurückgeben, und ich bin verloren, den genauen Grund. Ich weiß, es ist ein Fehler, und der Rückgabewert 1813, "Ressource Nicht Gefunden".

Habe ich andere Ressourcen in diesem Projekt, habe ich eine version-Knoten, ein mainifest Knoten, (von denen, ich bin nicht direkt Lesen) ich habe ein Symbol Knotens (ich bewerbe mich, um meine Fenster-system-Menü-Symbol) und ein bitmap (das ich bin laden als eine textur.). Diese alle haben definierte Typen, zum Beispiel der Art, die für die Bitmap ist 12. Nun, ich bin versucht, laden Sie eine text-Datei, ist eine 'user defined' - Typ 10. Ich weiß, die Daten in die ausführbare Datei, denn wenn ich es öffnen in einem text-editor,... (ja, das habe ich versucht), es ist vorhanden, es ist also mit eingeschlossen.

die erste Funktion war ein Versuch, zu gehen durch alle Datei-Ressourcen in einem Versuch, um Daten zu suchen. Es fand die Typen 2, 3, 14, 16 und 24., aber nicht 10. Ich habe entschieden Sie sich diese anderen Typen als die oben genannten Ressourcen. (- bitmap=2), (Symbol=3), (RT_ICON(3)+RT_ICON_GROUP(11)=14) (version=16), (manifest=24). Benutzer definiert werden sollten, geben Sie 10 ein, und es trifft ihn nicht finden.

Meine Ressourcen.rc-Datei enthält die folgenden:

LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
IDR_textfile1      textfile       ".\\Data\\World.txt"

Diese definiert die Datei, die geladen werden, (wieder, ich weiß, das funktioniert, ich kann sehen, dass der text von dem code IN der ausführbaren Datei.)

Meine Ressourcen.h-Datei definiert die folgenden:

#define IDR_textfile1                           102

So, es wird definiert, enthalten, gebaut, und alle anderen Ressourcen funktionieren, und doch, FindResourceExA NULL zurück. Alle include-Dateien, gefüttert, (ich bekommen würde, Warnungen und Fehler, wenn es nicht so war.)

So, die Frage ist, bezeichne ich FindResourceExA richtig? es ist definiert als:

WINBASEAPI HRSRC WINAPI FindResourceExA(HINSTANCE,LPCSTR,LPCSTR,WORD);

gut, ich habe versucht, HINSTANCE, null, hInstance an meine Fenster in WinMain, auch GetModuleHandleA Ergebnisse, keine Würfel.

Für LPCSTR, die die Ressource-ID, die ich habe versucht, was Sie sehen, MAKEINTRESOURCE(IDR_textfile1), und ich habe hart versucht, die Kodierung der ID-Nummer, in diesem Fall 102. Kein Würfel.
Für den Typ, ich habe müde, andere Variationen, den richtigen Wert laut Microsoft sollte 10 sein. Das ist, warum ich crated der EnumResNameProc, versuchen zu sehen, was andere IDs vorhanden ist, von 0 bis 500, und alles, was ich zurück bekam, war die oben aufgeführten, auf der off-chance, etwas definiert war lustig. Kein Würfel.

Habe ich versucht, sowohl die FindResourceExA FindResourceA (mit und ohne 'Ex')
Kein Würfel.

Ich weiß, es ist da, ich habe gelernt, mehr als I-Sorgfalt über diese Funktion, aber es wird ihn nicht finden, und ich bin ratlos, was anderes zu versuchen.

Als für die Entwicklungsumgebung, die ich benutze MinGW+Eclipse+CDT, und mit winres aus den GCC-tools zum erstellen der resource-Objekt-Datei. Ich habe mir für bugs in winres, um zu sehen, wenn es etwas komisch auf binäre Arten. (das ist, was undefiniert betrachtet werden, auch wenn ich bin laden eine text-Datei.) oh, ich habe auch versucht, re-speichern Sie die Datei als ANSI -, UTF-8 und UNICODE im Falle der Binär-format der text ankam.

Ich bin ratlos, ich weiß nicht, was anderes zu versuchen. Ich weiß, die Daten sind da, ich weiß nur nicht, warum es nicht auf Sie zugreifen. Die Windows-API-Aufruf kann nicht entweder die Daten, oder die Daten, die codiert ist in einem screwey, und so nicht auf es.

Was kann ich sonst noch versuchen?

BOOL CALLBACK EnumResNameProc (
  HMODULE hModule,
  LPCTSTR lpszType,
  LPTSTR lpszName,
  LONG_PTR lParam)
{
    std::cerr << "WTF INFO BEGIN here! \n";
    //std::string info = lpszName;
    int a = lParam;
    std::cerr  << "We found something: " << a << std::endl;
    MessageBoxA ( NULL, lpszName, (LPCSTR) "Found: ", MB_OK);
    std::cerr << "WTF INFO END here! \n";
    return true;
} 

void LoadFileInResource( HINSTANCE hInstance,
                         int name,
                         int type,
                         DWORD size,
                         const char* data)
{
    // HMODULE handle = GetModuleHandleA(NULL);

    for (int a = 0;a<500;a++) {
    EnumResourceNamesA(hInstance, MAKEINTRESOURCE(a),
                      (ENUMRESNAMEPROCA) & EnumResNameProc, (LONG_PTR) a);
   }

   HRSRC rc = FindResourceExA(hInstance,
                               MAKEINTRESOURCE(IDR_textfile1),
                               MAKEINTRESOURCE(10),
                               MAKELANGID(LANG_NEUTRAL,
                               SUBLANG_NEUTRAL));
   if (rc == NULL) {
       DWORD fup = GetLastError();
       MessageBoxA ( NULL, (LPCSTR) "Crap not loaded.", (LPCSTR) "Error", MB_OK);
       std::cerr << "Crap not loaded, ERR: " << fup << std::endl;
   }

   //MessageBoxA ( NULL, (LPCSTR) " Test ", (LPCSTR) "Found: ", MB_OK);
   HGLOBAL rcData = LoadResource(hInstance, rc);
   //data = static_cast<const char*>(LockResource(rcData));
   data = (const char*) LockResource(rcData);
   size = SizeofResource(hInstance, rc);
   std::cout << "Res size = " << (long) size << std::endl;
   std::cout << "data =" << data << :: std::endl;
   //   wsprintf(szMsg,"Values loaded : %d, %d, %d\nSize = %d",
   //   pmem->Value1,pmem->Value2,pmem->Value3);
   //  MessageBox(hWnd, szMsg,lpszAppName,MB_OK);
}
Sind Sie sicher, dass die Textdatei gespeichert, in der RCDATA (Typ 10) Ressource Baum? Ich erinnere mich an Probleme mit VS einbetten von Dateien als "RCDATA" statt RCDATA.
Sie können resource hacker zu finden, Ressourcen in eine ausführbare Datei, die im Gegensatz zu öffnen Sie in einem text-editor.

InformationsquelleAutor Quade2002 | 2012-03-10

Schreibe einen Kommentar