Проблемы с созданием функции mac DYLIB for system()
Я пытаюсь написать DYLIB (в коде:: Blocks), который должен быть вызван из приложения Mac, которое просто вызывает стандартную функцию C system (), давая при этом возможность дождаться завершения во втором аргументе (1 или 0).
#import <pthread.h> #import <stdlib.h> #include <unistd.h> extern "C" { char *tfname; void *system_async(void *arg) { system(tfname); return NULL; } double ExecuteShell(char *fname,double wait) { pthread_t tID; tfname = fname; if (wait>=1) { system(fname); } else { pthread_create(&tID,NULL,&system_async,NULL); usleep(5000); } return 0; } }
Теперь при вызове DYLIB (я не помню, какой компилятор я использовал, GCC или LLVM) я использую этот код в GameMaker Studio:
ExecuteShell('open /Applications/Calculator.app',0);
Однако калькулятор не запускается. Пытаюсь изменить второй аргумент на 1, и получаю тот же результат. Калькулятор не запускается. Никакая ошибка. Похоже, он игнорирует мой код все вместе, поэтому мне было интересно, не было ли что-то не так с тем, как я написал свой DYLIB.
Я смотрю на этот вопрос у кого-то еще был: ссылка.
string command = "open " + filePath; system(command.c_str());
Я вижу, что они использовали .c_str (). Должен ли я использовать .c_str()? В этом-то и проблема? Код, который я использую прямо сейчас, - system (fname);. Должен ли я изменить это на system(fname.c_str ());? Это нормально, что я использую тип char * для аргумента fname? Или из-за того, что я использую этот тип, мне нужно привести/преобразовать его в строку типа?
Я использую чужой Mac, чтобы перенести этот мой небольшой проект для работы на Mac, во всяком случае, я пытаюсь получить помощь здесь, прежде чем пытаться построить его снова, потому что я пытаюсь свести к минимуму то, сколько я прошу использовать компьютер Mac моего друга. Надеюсь, что следующая сборка, которую я сделаю, с очень небольшой настройкой, наконец-то заработает и запустит калькулятор.
Заранее спасибо!
Что я уже пробовал:
#import <pthread.h> #import <stdlib.h> #include <unistd.h> extern "C" { char *tfname; void *system_async(void *arg) { system(tfname); return NULL; } double ExecuteShell(char *fname,double wait) { pthread_t tID; tfname = fname; if (wait>=1) { system(fname); } else { pthread_create(&tID,NULL,&system_async,NULL); usleep(5000); } return 0; } }