小编Mik*_*e O的帖子

当我从char []变为字符串时,为什么我的冒号字符会消失?

在我正在处理的旧Windows应用程序中,我需要从环境变量获取路径,然后附加到其上以构建文件路径.所以代码看起来像这样:

static std::string PathRoot; // Private variable stored in class' header file

char EnvVarValue[1024];
if (! GetEnvironmentVariable(L"ENV_ROOT", (LPWSTR) EnvVarValue, 1024))
{
    cout << "Could not retrieve the ROOT env variable" << endl;
    return;
}
else
{
    PathRoot = EnvVarValue;
}

// Added just for testing purposes - Returning -1
int foundAt = PathRoot.find_first_of(':');

std::string FullFilePath = PathRoot;
FullFilePath.append("\\data\\Config.xml");
Run Code Online (Sandbox Code Playgroud)

ENV_ROOT的环境值在Windows系统控制面板中设置为"c:\ RootDir".但是当我运行程序时,我一直在FullFilePath中输入一个字符串,该字符串缺少冒号字符串以及根文件夹中的任何内容.它看起来像这样:" c\data\Config.xml ".

使用Visual Studio调试器,我在传递了GetEnvironmentVariable行之后查看了EnvVarValue,它向我展示了一个似乎具有我期望的所有字符的数组,包括冒号.但是在将它分配给PathRoot之后,将鼠标移到PathRoot上只会显示C并向下钻取它会显示一些关于坏ptr的信息.正如我所指出的那样,find_first_of()调用找不到冒号char.当附加完成时,它只保留初始C并删除RootDir值的其余部分.

所以似乎有一些关于冒号字符构造函数混乱的冒号字符.是的,我可以通过多种方式解决这个问题,方法是将冒号从env变量中删除,然后在代码中添加它.但我更愿意找到一种方法让它从环境变量中正确读取和使用.

c++

6
推荐指数
1
解决办法
302
查看次数

如何使用定时的Windows窗体更新实现线程安全?

在我的C#程序中,我试图让Panel按秒调用OnPaint()一次,根据当前设置进行一些图形绘制.主窗体使用System.Timers.Timer来调用Panel类的update方法,该方法以Refresh()调用结束.但是当我运行它时,我总是得到一个引用刷新行的InvalidOperationExcetpion,并说"从创建它的线程以外的线程访问的"跨线程操作无效:控制'." 它还引用了我的MSDN页面:http://msdn.microsoft.com/en-us/library/ms171728.aspx

但是该页面上的所有示例似乎都建议将新线程绑定到特定的表单事件.我正在更新基于计时器,而不是鼠标点击或类似的事件.在一个单独的线程上运行刷新对我来说听起来不错,但我不确定我是怎么做的(我很擅长Java,但是C#新手).

c#

1
推荐指数
1
解决办法
962
查看次数

标签 统计

c# ×1

c++ ×1