Bu işi yapmak için, sorunlu DLL olarak aynı C++ çalışma zamanına bağlanan bir yerel DLL oluşturmanız gerektiğini düşünüyorum. Stdout'u yeniden yönlendirmek için freopen
'u kullanmanız gerekir. freopen: reverting back to original stream
C++ kod şu şekilde görünecektir: Bu kod için Kaynağım bu cevabı
#include <io.h>
__declspec(dllexport) void RedirectStdOutputToNul(int *fd, fpos_t *pos)
{
fflush(stdout);
fgetpos(stdout, pos);
*fd = _dup(fileno(stdout));
freopen("NUL", "w", stdout);
}
__declspec(dllexport) void RestoreStdOutput(int fd, fpos_t pos)
{
fflush(stdout);
_dup2(fd, fileno(stdout));
close(fd);
clearerr(stdout);
fsetpos(stdout, &pos);
}
Sen p/böyle kodunuzdan o çağırabilirsiniz:
[DllImport(dllname, CallingConvention = CallingConvention.Cdecl)]
static extern void RedirectStdOutputToNul(out int fd, out long pos);
[DllImport(dllname, CallingConvention = CallingConvention.Cdecl)]
static extern void RestoreStdOutput(int fd, long pos);
Ve teşekkür şöyle diyebiliriz:
int fd;
long pos;
RedirectStdOutputToNul(out fd, out pos);
print("boo");
RestoreStdOutput(fd, pos);
print("yah");
Bu, bir dinamik için bir DLL bağlanır MSVC çalışma zamanı ve aynı bağlantıyı kod yazabilirsiniz.
Kodunuzu, ayrı bir işlemde C++ DLL'ye yapılan çağrıları değiştirecek şekilde değiştirebilir misiniz? Öyleyse, 'ProcessWindowStyle.Hidden' seçeneği ile ayrı bir işlemi başlatabilirsiniz. Tam olarak sizin aradığınız şey olmayabilir, ama işe yarayacaktı. – shf301