1. Уважаемые гости и пользователи форума.
    Администрация настоятельно рекомендует не регистрировать несколько аккаунтов для одного пользователя. При выявлении наличия мультиаккаунтов будут заблокированы все учетные записи данного пользователя.
    Аккаунты, зарегистрированные на временную почту будут также заблокированы.

Проблема isJpgtoBmp

Тема в разделе "C/C++", создана пользователем sergey3695, 7 ноя 2015.

  1. Ветеран Модератор

    Регистрация:
    26 июн 2011
    Сообщения:
    1.329
    Симпатии:
    867
    Код (C++):
    1. #include <windows.h>
    2. #include <olectl.h>
    3.  
    4. LPDISPATCH pImage;
    5.  
    6. void __stdcall isJpgtoBmp(LPCTSTR pszFileName,char *outName)
    7. {
    8. HANDLE hFile=CreateFile(pszFileName,GENERIC_READ,0,NULL,
    9.    OPEN_EXISTING,0,NULL);
    10. DWORD dwFileSize=GetFileSize(hFile,NULL);
    11. HGLOBAL hGlobalA=GlobalAlloc(GMEM_MOVEABLE,dwFileSize);
    12. LPVOID pvData=GlobalLock(hGlobalA);
    13. DWORD dwBytesRead=0;
    14. BOOL bReadFile=ReadFile(hFile,pvData,dwFileSize,&dwBytesRead,NULL);
    15. GlobalUnlock(hGlobalA);
    16. CloseHandle(hFile);
    17. LPSTREAM pst=NULL;
    18. HRESULT hr=CreateStreamOnHGlobal(hGlobalA,TRUE,&pst);
    19. if(pImage) pImage->Release();
    20. hr=OleLoadPicture(pst,dwFileSize,FALSE,IID_IPicture,(LPVOID*)&pImage);
    21. pst->Release();
    22. WCHAR fBuff[MAX_PATH];
    23. mbstowcs(fBuff,outName,sizeof(fBuff)/sizeof(WCHAR));
    24. OleSavePictureFile(pImage,fBuff);
    25. }
    26.  
    использование
    Код (Inno):
    1.  
    2. [Setup]
    3. AppName=My Program
    4. AppVersion=1.5
    5. DefaultDirName={pf}\My Program
    6. UninstallDisplayIcon={app}\MyProg.exe
    7. OutputDir=.
    8.  
    9. [Files]
    10. Source: "1.jpg"; DestDir: "{tmp}"; Flags: dontcopy ignoreversion nocompression;
    11. Source: "MyDll.dll"; DestDir: "{tmp}"; Flags: dontcopy ignoreversion nocompression;
    12.  
    13. [Code]
    14. procedure isJpgtoBmp(filename: PansiChar; name: AnsiString);
    15. external 'isJpgtoBmp@files:MyDll.dll stdcall delayload';
    16.  
    17. function InitializeSetup(): Boolean;
    18. begin
    19.   if not FileExists(ExpandConstant('{tmp}\MyDll.dll')) then ExtractTemporaryFile('MyDll.dll');
    20.   if not FileExists(ExpandConstant('{tmp}\1.jpg')) then ExtractTemporaryFile('1.jpg');
    21.   Result:= True;
    22. end;
    23.  
    24. function NextButtonClick(CurPage: Integer): Boolean;
    25. begin
    26.   if CurPage = wpWelcome then begin
    27.     isJpgtoBmp(PChar(ExpandConstant('{tmp}\1.jpg')),'1');
    28.   end;
    29.   Result := True;
    30. end;
    31.  
    проблема в том что процедура не работает (ничего не делает) (в чем ошибка в коде?) (скорее интересно как улучшить код). (установщик собирал на ansi)
     

    Вложения:

    • C++.rar
      Размер файла:
      1,3 МБ
      Просмотров:
      19
    Ramiro Cruzo нравится это.
  2. Он где то тут Администратор

    Регистрация:
    15 июн 2011
    Сообщения:
    801
    Симпатии:
    509
    У меня все работает
    Не просто 1, а полный путь.
    Код (Inno):
    1. isJpgtoBmp(PChar(ExpandConstant('{tmp}\1.jpeg')),'C:\321\1.bmp');
     
    sergey3695 нравится это.
  3. Ветеран Модератор

    Регистрация:
    26 июн 2011
    Сообщения:
    1.329
    Симпатии:
    867
    :facepalm: блин. стыдно то как. спс. не ну ппц :rofl:
    Код (C++):
    1. #include <windows.h>
    2. #include <olectl.h>
    3.  
    4. LPDISPATCH pImage;
    5.  
    6. void __stdcall isJpgtoBmp(LPCTSTR pszFileName,char *outName)
    7. {
    8. HANDLE hFile=CreateFile(pszFileName,GENERIC_READ,0,NULL, OPEN_EXISTING,0,NULL);
    9. if(!(hFile == INVALID_HANDLE_VALUE))
    10. {
    11. DWORD dwFileSize=GetFileSize(hFile,NULL);
    12. HGLOBAL hGlobalA=GlobalAlloc(GMEM_MOVEABLE,dwFileSize);
    13. LPVOID pvData=GlobalLock(hGlobalA);
    14. DWORD dwBytesRead=0;
    15. BOOL bReadFile=ReadFile(hFile,pvData,dwFileSize,&dwBytesRead,NULL);
    16. GlobalUnlock(hGlobalA);
    17. CloseHandle(hFile);
    18. LPSTREAM pst=NULL;
    19. HRESULT hr=CreateStreamOnHGlobal(hGlobalA,TRUE,&pst);
    20. if(pImage) pImage->Release();
    21. hr=OleLoadPicture(pst,dwFileSize,FALSE,IID_IPicture,(LPVOID*)&pImage);
    22. pst->Release();
    23. WCHAR fBuff[MAX_PATH];
    24. mbstowcs(fBuff,outName,sizeof(fBuff)/sizeof(WCHAR));
    25. OleSavePictureFile(pImage,fBuff);
    26. }
    27. }
    28.  
    Krinkels, есть смысл для этой операции вместо этого сделать с использованием gdi+?
     
    Последнее редактирование: 7 ноя 2015
    Ramiro Cruzo нравится это.
  4. Он где то тут Администратор

    Регистрация:
    15 июн 2011
    Сообщения:
    801
    Симпатии:
    509
    Я с ней не работал, не подскажу
     
  5. Тех. админ Администратор

    Регистрация:
    26 дек 2011
    Сообщения:
    537
    Симпатии:
    643
    Пол:
    Мужской
    Я конечно не сишник, но разве не проще вот так написать? :)
    Код (C++):
    1. if(hFile != INVALID_HANDLE_VALUE)
     
    sergey3695 нравится это.
  6. Он где то тут Администратор

    Регистрация:
    15 июн 2011
    Сообщения:
    801
    Симпатии:
    509
    Тогда уж проще так:
    Код (C++):
    1. if( hFile == INVALID_HANDLE_VALUE )
    2. {
    3.     MessageBox( 0, "Ошибка", "Внимание", 0 );
    4.     return;
    5. }
     

Поделиться этой страницей