Il y a quelques problèmes que vous devez résoudre pour mettre en œuvre ce que vous voulez:
- L'exe doit avoir table de déplacement (utilisation interrupteur de liaison/FIXE: NO)
- L'exe doit les exportations au moins une fonction - Il est clair comment faire cela.
Je recommande d'utiliser DUMPBIN.EXE sans certains commutateurs (/ headers,/exports et sans commutateurs) pour examiner les en-têtes exe. Vous pouvez comparer la structure de votre application avec Winword.exe ou outlook.exe qui exporte certaines fonctions.
Si tout cela ne va pas aider, je vais essayer d'écrire une application de test EXE qui peut être chargée en tant qu'exe et afficher le code ici.
MISE À JOUR: Tout à fait vérifié ma suggestion. Ça marche. Fichier Loadable.c ressemble suivant
#include <windows.h>
#include <stdio.h>
EXTERN_C int __declspec(dllexport) WINAPI Sum (int x, int y);
EXTERN_C int __declspec(dllexport) WINAPI Sum (int x, int y)
{
return x + y;
}
int main()
{
printf ("2+3=%d\n", Sum(2,3));
}
Le seul commutateur de liaison important est /FIXED:NO
que l'on peut trouver en partie avancée des paramètres de liaison. Le programme peut fonctionner et produire la sortie "2+3=5
".
Un autre EXE chargé le fichier EXE comme DLL et appelle la fonction Sum
:
#include <windows.h>
#include <stdio.h>
typedef int (WINAPI *PFN_SUM) (int x, int y);
int main()
{
HMODULE hModule = LoadLibrary (TEXT("C:\\Oleg\\ExeAsDll\\Loadable.exe"));
PFN_SUM fnSum = (PFN_SUM) GetProcAddress (hModule, "[email protected]");
int res = fnSum (5,4);
printf ("5+4=%d\n", res);
return 0;
}
Le programme peut également exécuter et produit la sortie "5+4=9
".