大神们求助C2664 HRESULT ATL::CImage::Save

monkeycfhack 2017-04-18 07:56:24
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 C2664 “HRESULT ATL::CImage::Save(LPCTSTR,const GUID &) throw() const”: 无法将参数 1 从“const char [17]”转换为“IStream *” ConsoleApplication7 c:\users\user\documents\visual studio 2015\projects\consoleapplication7\consoleapplication7\consoleapplication7.cpp 38


这要怎么解决
...全文
630 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
monkeycfhack 2017-04-19
  • 打赏
  • 举报
回复
引用 1 楼 jianwen0529 的回复:
HRESULT ATL::CImage::Save(LPCTSTR,const GUID &) throw() const 中是不是有个什么地方const char [17]” 赋值给一个 “IStream *”对象?
是的 我想要调用ATL::CImage::Save 但是第一个参数是IStream 然而我想要传一个字符串怎么办 可不可以先把字符串(string 或者 char[]) 转化为IStream ? 然后怎么转化?
幻夢之葉 2017-04-19
  • 打赏
  • 举报
回复
引用 3 楼 monkeycfhack 的回复:
[quote=引用 1 楼 jianwen0529 的回复:] HRESULT ATL::CImage::Save(LPCTSTR,const GUID &) throw() const 中是不是有个什么地方const char [17]” 赋值给一个 “IStream *”对象?
是的 我想要调用ATL::CImage::Save 但是第一个参数是IStream 然而我想要传一个字符串怎么办 可不可以先把字符串(string 或者 char[]) 转化为IStream ? 然后怎么转化?[/quote] 不可以,没有默认的转换操作。 IStream是输入流?那你把流中的数据读取进字符串,然后再传进去,不过具体还得看你实际上是要怎么应用的。
zgl7903 2017-04-19
  • 打赏
  • 举报
回复

HRESULT Save(
   IStream* pStream,
   REFGUID guidFileType
) const throw();
HRESULT Save(
   LPCTSTR pszFileName,
   REFGUID guidFileType= GUID_NULL
) const throw();
可以 mImag.Save((LPCTSTR)CString(sName));
赵4老师 2017-04-18
  • 打赏
  • 举报
回复
仅供参考:
#pragma comment(lib,"user32")
#pragma comment(lib,"gdi32")
#include <stdlib.h>
#include <stdio.h>
#include <io.h>
#include <conio.h>
#include <windows.h>
#include <atlimage.h>
#include <objidl.h>
void DrawPic(HDC hdc,char *buf,int len) {
    HGLOBAL hMem=GlobalAlloc(GMEM_FIXED,len);
    BYTE* pMem=(BYTE*)GlobalLock(hMem);
    memcpy(pMem,buf,len);
    IStream* pStream;
    HRESULT hr=CreateStreamOnHGlobal(pMem,FALSE,&pStream);

    CImage img;
    img.Load(pStream);
    img.Draw(hdc,CPoint(0,0));

    img.Destroy();
    pStream->Release();
    GlobalUnlock(hMem);
    GlobalFree(hMem);
}
//HWND WINAPI GetConsoleWindow();
void HideTheCursor() {
    CONSOLE_CURSOR_INFO cciCursor;
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    if (GetConsoleCursorInfo(hStdOut, &cciCursor)) {
        cciCursor.bVisible = FALSE;
        SetConsoleCursorInfo(hStdOut, &cciCursor);
    }
}
void ShowTheCursor() {
    CONSOLE_CURSOR_INFO cciCursor;
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    if (GetConsoleCursorInfo(hStdOut, &cciCursor)) {
        cciCursor.bVisible = TRUE;
        SetConsoleCursorInfo(hStdOut, &cciCursor);
    }
}
int main() {
    HWND  hwnd;
    HDC   hdc;
    HFONT hfont;
    HBITMAP hbm;
    HDC hdcBits;
    BITMAP bm;

    system("color F0");
    system("cls");
    HideTheCursor();
    hwnd  = GetConsoleWindow();
    hdc   = GetDC(hwnd);
    hfont = CreateFont(48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "华文楷体");
    SelectObject(hdc,hfont);
    TextOut(hdc,10,10,"这是泡泡",8);
    DeleteObject(hfont);
    hbm=(HBITMAP)LoadImage(0,"C:\\Windows\\Soap Bubbles.bmp",IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);
    if (hbm) {
        hdcBits = CreateCompatibleDC(hdc);
        GetObject (hbm, sizeof(BITMAP), &bm);
        SelectObject(hdcBits,hbm);
        BitBlt(hdc,200,10,bm.bmWidth, bm.bmHeight,hdcBits,0,0,SRCCOPY);
        DeleteDC(hdcBits);
        DeleteObject(hbm);
    }
    getch();
    FILE *f;
    f=fopen("c:\\new\\tmp.jpg","rb");
    if (f) {
        int fl=filelength(fileno(f));
        char *buf=(char *)malloc(fl);
        if (buf) {
            fread(buf,fl,1,f);
        }
        fclose(f);
        if (buf) {
            DrawPic(hdc,buf,fl);
            free(buf);
        }
    }
    ReleaseDC(hwnd,hdc);
    getch();
    system("color 07");
    system("cls");
    ShowTheCursor();
    return 0;
}
幻夢之葉 2017-04-18
  • 打赏
  • 举报
回复
HRESULT ATL::CImage::Save(LPCTSTR,const GUID &) throw() const 中是不是有个什么地方const char [17]” 赋值给一个 “IStream *”对象?

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧