Вы можете попробовать создать программу, которая называет ее в DosBox. Затем переименуйте 16-битный исполняемый файл в progname.old.exe
и переименуйте вашу новую программу в progname.exe
. Вот пример программы (Примечание: это не проверено. Может даже не скомпилироваться.):
#include <stdlib.h> #include <string.h> #include <windows.h> int main(int argc, char* argv[]) { // The string we use to call DOSBOX: const char *dosboxstrstart = "path\\to\\dosbox \"path\\to\\progname.old.exe "; const char *dosboxstrend = "\" -exit"; // Get the entire command line, with a full path prepended // to the first argument char *allcmdline = GetCommandLine(); // Get a pointer to the start of this program's name, then // skip past this program's name to get the arguments only char *argstart = strstr(allcmdline, argv[0]) + strlen(argv[0]); // Get the length of the argument string // Get the length of the DosBox strings size_t argstartlen = str_len(argstart); size_t dosboxstrstartlen = str_len(dosboxstrstart); size_t dosboxstrendlen = str_len(dosboxstrend); // Create a buffer for the string to go into (+1 for the \0) // Assumes that malloc won't go wrong; a lovely segfault // will occur if it does! :-p char *finalstring = malloc(argstartlen + dosboxstrstartlen + dosboxstrendlen + 1); // Put the string into it, piece by piece memcpy(finalstring, dosboxstrstart, dosboxstrstartlen); memcpy(finalstring + dosboxstrstartlen, argstart, argstartlen); memcpy(finalstring + dosboxstrstartlen + argstartlen, dosboxstrend, dosboxendlen + 1); // Run the command system(finalstring); // Perform our duty to the almighty kernel! free(finalstring); }
Этот код предполагает, что аргументы, которые передает 32-битная программа, не содержат кавычек. Если они это сделают, вам нужно будет добавить какую-нибудь экранирующую функцию, а я не знаю ни одной в стандартной библиотеке.