Linker Fehler GetModuleFileNameExA@16

  • Themenstarter Themenstarter Ava-chan
  • Beginndatum Beginndatum
A

Ava-chan

Ich schreibe gerade eine kleine DLL welche einem JavaProgramm den Ausführungspfad eines Prozesses benannt mit namen zurückgeben soll.

Die Rückgabe von Daten und das holen des Prozesses funktioniert schon. Der Processhandle wird dann auch an die Funktion GetModuleFileNameEx weitergegeben. Diese kann jedoch wenn nicht auskomentiert nich kompiliert werden.


#include "windows.h"
#include "tlhelp32.h"
#include <jni.h>
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include "Main.h"
#include "Psapi.h"
#include <iostream>
#include <string>
#include <algorithm>
#include <functional>
#include <cctype>
#pragma comment(lib, "psapi.lib")

...

JNIEXPORT void JNICALL Java_Main_printHelloWorld(JNIEnv *env, jclass cls) {
printf("start\n");
HANDLE proc = GetProcessHandle("xtop.exe", PROCESS_QUERY_INFORMATION);
if (proc != NULL) {
cout << "gefunden" << endl;
} else {
cout << "nicht gefunden" << endl;
}

TCHAR filename[MAX_PATH];
if (proc != NULL) {
if (GetModuleFileNameEx(proc, 0, filename, sizeof(filename)) == 0) {
cout << "Failed to get module filename." << endl;
} else {
cout << "Module filename is: " << filename << endl;
}
}

//TerminateProcess( GetProcessHandle( "xtop.exe", PROCESS_TERMINATE ), 0 );
return;
}


Ich weiß das es ein paar viele imports sind ^^ aber die sortiere ich aus wenn es denn läuft.

Hat jemand eine Idee wie ich es schaffe das der Linker es ordentlich macht ?

Ich arbeite unter windows 7 x64 und die dll wird eine 32 bit dll (mir ist klar das die nicht unter einem 64 bit system eingebunden werden kann). Als Compilier benutze ich den g++ von MinGW geupdatet auf Version 4.4 mit entsprechenden dll anpassungen.

Grüße,
Ava-chan
 
Da ich das ganze über MinGW und komandozeile kompiliere denke ich muss ich die Library noch angeben.

Jedoch weiß ich nicht wie ich meinem compiler das sage (libpsapi.a einbinden)
 
Ok ... die Lösung ist ganz am ende des Kompileraufrufs -lpsapi anzugeben

g++ -o test.exe test.c -lpsapi

dann gehts ^.^

Ava-chan
 
Zurück