[C ++ Interop从Windows服务调用时的行为有所不同

问题描述 投票:0回答:1

我有一个C#可执行文件,可以对C ++库进行互操作调用:

[DllImport(DLL_NAME, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.I4)]
public static extern int Check(string name, string version, bool debug);

在C ++代码中,我将std :: cout重定向到文件:

std::streambuf* psbuf, * backup;
std::ofstream filestr;

...

if (debug)
{
    filestr.open("debug.txt");
    backup = std::cout.rdbuf();
    psbuf = filestr.rdbuf();
    std::cout.rdbuf(psbuf);

    std::cout << "some debug message" << std::endl; 

    std::cout.rdbuf(backup);
    filestr.close();
}

[当我将C#可执行文件作为控制台程序运行,但是当我将其作为Windows服务运行时,该文件不是由C ++代码创建的。]

造成这种差异的原因是什么?

我有一个C#可执行文件,可以对C ++库进行互操作:[DllImport(DLL_NAME,CharSet = CharSet.Ansi,CallingConvention = CallingConvention.Cdecl)] [返回:MarshalAs(UnmanagedType.I4)] ...

c# c++ interop
1个回答
1
投票

实际上正在创建文件,但是作为服务运行时的工作目录是不同的:as explained here

© www.soinside.com 2019 - 2024. All rights reserved.