小编jrh*_*jrh的帖子

strdup还是_strdup?

当我strdup在Microsoft Visual C++中使用时,它警告我:

警告C4996:'strdup':不推荐使用此项目的POSIX名称.而是使用符合ISO C++的名称:_strdup.详细信息请参见在线帮助.

这似乎_strdup是正确的.

但是当我_strdup在GCC(Fedora Linux OS)中使用时,编译器显示错误:

错误:未在此范围内声明'_strdup'

使用GCC和Linux,编译器不会显示任何错误strdup.

哪个是正确的 - strdup或者_strdup

注意:我包含<string.h>在我的代码中.

c c++ strdup visual-studio

54
推荐指数
6
解决办法
4万
查看次数

如何摆脱Visual Studio中的"不安全"警告/错误(strcpy,sprintf,strdup)

我试图摆脱一些编译器警告说strcpy,sprintf等是不安全的.我明白他们为什么不安全,但我想不出一个以C++风格修复代码的好方法.

这是代码的摘录:

extList->names[i]=(char *)malloc(length*sizeof(char));
strcpy(extList->names[i],extName);                     // unsafe
// strncpy(extList->names[i],extName,length);          // also unsafe
Run Code Online (Sandbox Code Playgroud)

这是消息:

C4996:'strcpy':此函数或变量可能不安全.请考虑使用strcpy_s.要禁用弃用,请使用_CRT_SECURE_NO_WARNINGS.详细信息请参见在线帮助.

在不知道要复制的东西的长度的情况下,我想不出用C++复制数据的安全方法.我知道有strlen(),但这也是不安全的,因为它假定(可能不正确)数据是以空值终止的.

也:

// used to concatenate:
sprintf(extStr,"%s%s",platExtStr,glExtStr);
Run Code Online (Sandbox Code Playgroud)

C4996:'sprintf':此函数或变量可能不安全.请考虑使用sprintf_s.要禁用弃用,请使用_CRT_SECURE_NO_WARNINGS.详细信息请参见在线帮助.

使用std :: string来连接很容易,但是我需要以某种方式将数据输入extStr(而不是使用strcpy,lol).string :: c_str()函数返回一个指向不可修改数据的指针,所以我不能只设置extStr等于它.(我甚至不确定c_str()指针是否需要稍后调用它?是否使用"new"分配空间?)

关于这个东西的任何建议?这是10,000行文件的一部分,而不是我的......所以我并不热衷于用C++方式重写这个东西.

c++ windows debugging visual-studio

21
推荐指数
4
解决办法
5万
查看次数

如何使用仪表式进度条?

在Vista/7中,Windows资源管理器外壳窗口使用一种特殊的静态进度条来显示硬盘空间.

使用默认样式时,此栏为蓝色且未设置动画.当它接近满(低磁盘空间)时,它也会变成红色.

使用消息传递,我可以告诉Windows Forms ProgressBar控件将其状态更新为Paused和Error(分别为黄色和红色),这样可以正常工作,但这些仍然是特定于进度的.

Windows用户体验指南中,它特别指出了进度条的这个"米"变体:

此模式不是进度条,但它是使用进度条控件实现的.仪表具有独特的外观,可以将它们与真正的进度条区分开来.

他们说它"是使用进度条控件实现的",所以......怎么样?我可以向控件发送什么消息让它以这种方式运行?

我已经看到你可以发送用于设置条形颜色的消息,但文档说在启用视觉样式时会忽略这些调用.原始ProgressBar控件的Windows API文档中没有任何其他内容似乎提示了一种方法.我只是坚持制作一个自定义绘制栏?我真的很想尽可能利用操作系统,以便应用程序在不同的操作系统版本中显得一致.我意识到Vista之前的版本可能不会支持这一点.

我正在寻找一个Windows窗体的解决方案,但我不知道,如果它甚至暴露在所有通过的Win32 API.

explorer winforms progress-bar

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

嵌入式资源存储在.NET应用程序中的哪个位置?

如果我向Resources.resx添加资源,它们是否嵌入在可执行文件中?

我已经读过资源存储在程序集中的某个地方,但项目中的所有文件(包括输出文件夹中的文件)都是程序集的一部分?

或者,汇编只是由编译器和资源生成的文件和模块不包含在程序集中?

有人可以澄清这是如何工作的吗?

.net resources visual-studio

6
推荐指数
2
解决办法
846
查看次数

为什么CreateWindow()在注册窗口类时已经提供了hInstance作为参数?

注册窗口类时,必须填写WNDCLASS结构,其中包含一个hInstance字段:

typedef struct {
    UINT style;
    WNDPROC lpfnWndProc;
    int cbClsExtra;
    int cbWndExtra;
    HINSTANCE hInstance;
    HICON hIcon;
    HCURSOR hCursor;
    HBRUSH hbrBackground;
    LPCTSTR lpszMenuName;
    LPCTSTR lpszClassName;
} WNDCLASS
Run Code Online (Sandbox Code Playgroud)

然后,创建窗口,使用CreateWindow()它来获取这些参数:

HWND CreateWindow(          
    LPCTSTR lpClassName,
    LPCTSTR lpWindowName,
    DWORD dwStyle,
    int x,
    int y,
    int nWidth,
    int nHeight,
    HWND hWndParent,
    HMENU hMenu,
    HINSTANCE hInstance,
    LPVOID lpParam
);
Run Code Online (Sandbox Code Playgroud)
  • 如果hInstance与提供WNDCLASS上课的时候登记的,为什么有必要提供一个hInstanceCreateWindow()

  • hInstance提供的WNDCLASS应该与hInstance提供的相同CreateWindow()吗?

  • 如果WNDCLASS hInstance和 …

c winapi

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

当资源可用时,VB.net HttpWebRequest 返回 403 禁止

你好,我在 vb.net 应用程序中使用了一段时间的代码,但今天当我尝试它时,它返回了 403 错误。

Shared Function GetHtmlPage(ByVal http://mmo-stream.net/AiaSpecto/tester.php As String) As String

    Dim strResult As String
    Dim objResponse As WebResponse
    Dim objRequest As WebRequest

    objRequest = HttpWebRequest.Create(strURL)

    objResponse = objRequest.GetResponse()
    Using sr As New StreamReader(objResponse.GetResponseStream())
        strResult = sr.ReadToEnd()
        sr.Close()
    End Using
    Return strResult

End Function
Run Code Online (Sandbox Code Playgroud)

我真的不明白为什么我会收到 403 错误,因为当我进入链接本身时,我会收到 OK 消息。

vb.net httpwebrequest

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

ImageList:处理原始图像会将其从列表中删除

ImageList应创建插入其中的所有图像的副本.因此,在将原件添加到列表后处置原件应该是安全的.

为什么以下测试用例失败?

Bitmap test = new Bitmap(128, 128);
ImageList il = new ImageList();

il.Images.Add(test);
Assert.AreEqual(1, il.Images.Count); // OK, image has been inserted
test.Dispose(); // now let's dispose the original
try
{
    var retrievalTest = il.Images[0];
}
catch (ArgumentException) // ... but this Exception happens!
{
}

Assert.AreEqual(1, il.Images.Count); // and this will fail
Run Code Online (Sandbox Code Playgroud)

这里似乎发生了这样的事情:当尝试检索图像时,ImageList发现原始文件已被处理,并将其从ImageList中删除.

为什么会发生这种情况,我认为ImageList应该创建一个图像副本?

.net c# system.drawing imagelist winforms

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