Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> access violation при вызове inflate из zlib.dll, zlib.dll 1.1.3 динамическая линковка 
:(
    Опции темы
ohos
Дата 4.2.2012, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 13.12.2010

Репутация: нет
Всего: нет



Привет, я пытаюсь динамически прилинковать к своему проекту zlib.dll версии 1.1.3, как это делать прочитал в руководстве на другом форуме, сделал также, но при вызове функции из dll которая зовется Inflate возникает ошибка access violation. Архив со всем проектом приложил (он не большой), ошибка возникает в фунцкии:

Код

...
//указываем какие параметры принимает/возвращает наша импортируемая функция
typedef int(*functionDll)( z_streamp, int );
typedef int(__stdcall*functionDll2)( z_streamp );
typedef int(*functionDll3)( z_streamp );

//определяем переменые как глобальные
functionDll fpFunction;
functionDll2 fpFunction2;
functionDll3 fpFunction3;

int CAnotherTestDlg::inf(FILE *source, FILE *dest)
{
...
//подргружаем нашу dll лежащую в папке экзешника
    HINSTANCE hDllInstance = LoadLibraryEx( "zlib.dll", 0, DONT_RESOLVE_DLL_REFERENCES );
    //HINSTANCE hDllInstance = LoadLibrary( "zlib.dll");

    if(hDllInstance)
    {
        //импортим из dll функцию Inflate
        functionDll fpFunction = (functionDll)GetProcAddress(hDllInstance,"inflate");//получаем указатель
        if(fpFunction)
        {
            loadsucces = 1;
        }
        else
        {
            edit1.SetWindowText(edittext+ "GetProcAddress error inflate!\r\n" );
        }

        //импортим из dll функцию InflateInit
        functionDll2 fpFunction2 = (functionDll2)GetProcAddress(hDllInstance,"inflateInit");//получаем указатель
        if(fpFunction2)
        {

            ret = fpFunction2(&strm);
        }
        else
        {
            ret = inflateInit(&strm);
            edit1.SetWindowText(edittext+ "GetProcAddress error inflateInit!\r\n" );
        }

        //импортим из dll функцию inflateEnd
        functionDll3 fpFunction3 = (functionDll3)GetProcAddress(hDllInstance,"inflateEnd");//получаем указатель
        if(fpFunction3)
        {
        }
        else
        {
            edit1.SetWindowText(edittext+ "GetProcAddress error inflateEnd!\r\n" );
        }
        
    }
    else
    {
        edit1.SetWindowText(edittext+ "load library error!\r\n" );
    }
//ни одна из ошибок не вылезает при подключении dll и импорте
...
do {
            edit1.SetWindowText(edittext+"while 2\r\n");
            strm.avail_out = CHUNK;
            strm.next_out = out;

            if (loadsucces = 0)
            {
                ret = inflate(&strm, Z_NO_FLUSH);
            }
            else
            {
                ret = fpFunction(&strm, Z_NO_FLUSH);//access violation тут, но почему?
            }

            assert(ret != Z_STREAM_ERROR); 
...
    FreeLibrary(hDllInstance);

    return ret == Z_STREAM_END ? Z_OK : Z_DATA_ERROR;
...


но почему она возникает, если проверки при подключении dll не возвращают ошибок, что-то сделано неправильно еще?

Это сообщение отредактировал(а) ohos - 4.2.2012, 22:46

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  AnotherTest.zip 653,54 Kb
PM MAIL   Вверх
Dem_max
Дата 5.2.2012, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



Как ты думаешь есть разница ???
Вот ты говоришь мол хочу импортировать такую функцию
Код

typedef int(*functionDll)( z_streamp, int );


в zlib.dll экспортируется такую функцию
Код

int ZEXPORT inflate OF((z_streamp strm, int flush));


Чё разницы совсем что ли не видно ?????


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
ohos
Дата 5.2.2012, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 13.12.2010

Репутация: нет
Всего: нет



я в этом деле новичок, тогда как правильно указать импорт?
PM MAIL   Вверх
Dem_max
Дата 5.2.2012, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



делать как указано в zlib.h


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
ohos
Дата 5.2.2012, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 13.12.2010

Репутация: нет
Всего: нет



нашел в нем

Код

ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));


нашел описание ZEXTERN в zconf.h в виде

Код

#ifndef ZEXTERN
#  define ZEXTERN extern
#endif


если я правильно понял, то экспорт идет с указанием слова extern, которое судя по msdn указывает линкеру, что код написан на другом языке http://msdn.microsoft.com/query/dev10.quer...%29&rd=true , если я правильно понял, то при объявлении переменных мне нужно добавить также слово extern в

Код

extern functionDll fpFunction;
extern functionDll2 fpFunction2;
extern functionDll3 fpFunction3;


но так работать тоже не хочет, жалуется на неразрешенный внешний символ, но ошибка появляется только при компиляции, статический анализ её не выдает, не понимаю как правильно указывать импорт в данной ситуации, если можно, то smile 
PM MAIL   Вверх
boostcoder
Дата 5.2.2012, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(ohos @  5.2.2012,  18:49 Найти цитируемый пост)
если я правильно понял, то экспорт идет с указанием слова extern

не правильно понял.
ключевой момент тут в ZEXPORT
PM WWW   Вверх
ohos
Дата 6.2.2012, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 13.12.2010

Репутация: нет
Всего: нет



Не понимаю что с ним делать  smile 

Код

#ifndef ZEXPORT
#  define ZEXPORT
#endif


это открывается если перейти к объявлению ZEXPORT, эту конструкцию я тоже не понимаю, она объявляет сама себя если объявлена?  smile 
PM MAIL   Вверх
boostcoder
Дата 6.2.2012, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



ohos, нет слов...
ты даже поиском по документу пользоваться не умеешь %)

Код

/* zconf.h -- configuration of the zlib compression library
 * Copyright (C) 1995-2011 Jean-loup Gailly.
 * For conditions of distribution and use, see copyright notice in zlib.h
 */

/* @(#) $Id$ */

#ifndef ZCONF_H
#define ZCONF_H

/*
 * If you *really* need a unique prefix for all types and library functions,
 * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.
 * Even better than compiling with -DZ_PREFIX would be to use configure to set
 * this permanently in zconf.h using "./configure --zprefix".
 */
#ifdef Z_PREFIX     /* may be set to #if 1 by ./configure */
#  define Z_PREFIX_SET

/* all linked symbols */
#  define _dist_code            z__dist_code
#  define _length_code          z__length_code
#  define _tr_align             z__tr_align
#  define _tr_flush_block       z__tr_flush_block
#  define _tr_init              z__tr_init
#  define _tr_stored_block      z__tr_stored_block
#  define _tr_tally             z__tr_tally
#  define adler32               z_adler32
#  define adler32_combine       z_adler32_combine
#  define adler32_combine64     z_adler32_combine64
#  ifndef Z_SOLO
#    define compress              z_compress
#    define compress2             z_compress2
#    define compressBound         z_compressBound
#  endif
#  define crc32                 z_crc32
#  define crc32_combine         z_crc32_combine
#  define crc32_combine64       z_crc32_combine64
#  define deflate               z_deflate
#  define deflateBound          z_deflateBound
#  define deflateCopy           z_deflateCopy
#  define deflateEnd            z_deflateEnd
#  define deflateInit2_         z_deflateInit2_
#  define deflateInit_          z_deflateInit_
#  define deflateParams         z_deflateParams
#  define deflatePending        z_deflatePending
#  define deflatePrime          z_deflatePrime
#  define deflateReset          z_deflateReset
#  define deflateResetKeep      z_deflateResetKeep
#  define deflateSetDictionary  z_deflateSetDictionary
#  define deflateSetHeader      z_deflateSetHeader
#  define deflateTune           z_deflateTune
#  define deflate_copyright     z_deflate_copyright
#  define get_crc_table         z_get_crc_table
#  ifndef Z_SOLO
#    define gz_error              z_gz_error
#    define gz_intmax             z_gz_intmax
#    define gz_strwinerror        z_gz_strwinerror
#    define gzbuffer              z_gzbuffer
#    define gzclearerr            z_gzclearerr
#    define gzclose               z_gzclose
#    define gzclose_r             z_gzclose_r
#    define gzclose_w             z_gzclose_w
#    define gzdirect              z_gzdirect
#    define gzdopen               z_gzdopen
#    define gzeof                 z_gzeof
#    define gzerror               z_gzerror
#    define gzflags               z_gzflags
#    define gzflush               z_gzflush
#    define gzgetc                z_gzgetc
#    define gzgetc_               z_gzgetc_
#    define gzgets                z_gzgets
#    define gzoffset              z_gzoffset
#    define gzoffset64            z_gzoffset64
#    define gzopen                z_gzopen
#    define gzopen64              z_gzopen64
#    define gzprintf              z_gzprintf
#    define gzputc                z_gzputc
#    define gzputs                z_gzputs
#    define gzread                z_gzread
#    define gzrewind              z_gzrewind
#    define gzseek                z_gzseek
#    define gzseek64              z_gzseek64
#    define gzsetparams           z_gzsetparams
#    define gztell                z_gztell
#    define gztell64              z_gztell64
#    define gzungetc              z_gzungetc
#    define gzwrite               z_gzwrite
#  endif
#  define inflate               z_inflate
#  define inflateBack           z_inflateBack
#  define inflateBackEnd        z_inflateBackEnd
#  define inflateBackInit_      z_inflateBackInit_
#  define inflateCopy           z_inflateCopy
#  define inflateEnd            z_inflateEnd
#  define inflateGetHeader      z_inflateGetHeader
#  define inflateInit2_         z_inflateInit2_
#  define inflateInit_          z_inflateInit_
#  define inflateMark           z_inflateMark
#  define inflatePrime          z_inflatePrime
#  define inflateReset          z_inflateReset
#  define inflateReset2         z_inflateReset2
#  define inflateSetDictionary  z_inflateSetDictionary
#  define inflateSync           z_inflateSync
#  define inflateSyncPoint      z_inflateSyncPoint
#  define inflateUndermine      z_inflateUndermine
#  define inflateResetKeep      z_inflateResetKeep
#  define inflate_copyright     z_inflate_copyright
#  define inflate_fast          z_inflate_fast
#  define inflate_table         z_inflate_table
#  ifndef Z_SOLO
#    define uncompress            z_uncompress
#  endif
#  define zError                z_zError
#  ifndef Z_SOLO
#    define zcalloc               z_zcalloc
#    define zcfree                z_zcfree
#  endif
#  define zlibCompileFlags      z_zlibCompileFlags
#  define zlibVersion           z_zlibVersion

/* all zlib typedefs in zlib.h and zconf.h */
#  define Byte                  z_Byte
#  define Bytef                 z_Bytef
#  define alloc_func            z_alloc_func
#  define charf                 z_charf
#  define free_func             z_free_func
#  ifndef Z_SOLO
#    define gzFile                z_gzFile
#    define gz_header             z_gz_header
#    define gz_headerp            z_gz_headerp
#  endif
#  define in_func               z_in_func
#  define intf                  z_intf
#  define out_func              z_out_func
#  define uInt                  z_uInt
#  define uIntf                 z_uIntf
#  define uLong                 z_uLong
#  define uLongf                z_uLongf
#  define voidp                 z_voidp
#  define voidpc                z_voidpc
#  define voidpf                z_voidpf

/* all zlib structs in zlib.h and zconf.h */
#  ifndef Z_SOLO
#    define gz_header_s           z_gz_header_s
#  endif
#  define internal_state        z_internal_state

#endif

#if defined(__MSDOS__) && !defined(MSDOS)
#  define MSDOS
#endif
#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2)
#  define OS2
#endif
#if defined(_WINDOWS) && !defined(WINDOWS)
#  define WINDOWS
#endif
#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__)
#  ifndef WIN32
#    define WIN32
#  endif
#endif
#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32)
#  if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__)
#    ifndef SYS16BIT
#      define SYS16BIT
#    endif
#  endif
#endif

/*
 * Compile with -DMAXSEG_64K if the alloc function cannot allocate more
 * than 64k bytes at a time (needed on systems with 16-bit int).
 */
#ifdef SYS16BIT
#  define MAXSEG_64K
#endif
#ifdef MSDOS
#  define UNALIGNED_OK
#endif

#ifdef __STDC_VERSION__
#  ifndef STDC
#    define STDC
#  endif
#  if __STDC_VERSION__ >= 199901L
#    ifndef STDC99
#      define STDC99
#    endif
#  endif
#endif
#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus))
#  define STDC
#endif
#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__))
#  define STDC
#endif
#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32))
#  define STDC
#endif
#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__))
#  define STDC
#endif

#if defined(__OS400__) && !defined(STDC)    /* iSeries (formerly AS/400). */
#  define STDC
#endif

#ifndef STDC
#  ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */
#    define const       /* note: need a more gentle solution here */
#  endif
#endif

#if defined(ZLIB_CONST) && !defined(z_const)
#  define z_const const
#else
#  define z_const
#endif

/* Some Mac compilers merge all .h files incorrectly: */
#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__)
#  define NO_DUMMY_DECL
#endif

/* Maximum value for memLevel in deflateInit2 */
#ifndef MAX_MEM_LEVEL
#  ifdef MAXSEG_64K
#    define MAX_MEM_LEVEL 8
#  else
#    define MAX_MEM_LEVEL 9
#  endif
#endif

/* Maximum value for windowBits in deflateInit2 and inflateInit2.
 * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files
 * created by gzip. (Files created by minigzip can still be extracted by
 * gzip.)
 */
#ifndef MAX_WBITS
#  define MAX_WBITS   15 /* 32K LZ77 window */
#endif

/* The memory requirements for deflate are (in bytes):
            (1 << (windowBits+2)) +  (1 << (memLevel+9))
 that is: 128K for windowBits=15  +  128K for memLevel = 8  (default values)
 plus a few kilobytes for small objects. For example, if you want to reduce
 the default memory requirements from 256K to 128K, compile with
     make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7"
 Of course this will generally degrade compression (there's no free lunch).

   The memory requirements for inflate are (in bytes) 1 << windowBits
 that is, 32K for windowBits=15 (default value) plus a few kilobytes
 for small objects.
*/

                        /* Type declarations */

#ifndef OF /* function prototypes */
#  ifdef STDC
#    define OF(args)  args
#  else
#    define OF(args)  ()
#  endif
#endif

#ifndef Z_ARG /* function prototypes for stdarg */
#  if defined(STDC) || defined(Z_HAVE_STDARG_H)
#    define Z_ARG(args)  args
#  else
#    define Z_ARG(args)  ()
#  endif
#endif

/* The following definitions for FAR are needed only for MSDOS mixed
 * model programming (small or medium model with some far allocations).
 * This was tested only with MSC; for other MSDOS compilers you may have
 * to define NO_MEMCPY in zutil.h.  If you don't need the mixed model,
 * just define FAR to be empty.
 */
#ifdef SYS16BIT
#  if defined(M_I86SM) || defined(M_I86MM)
     /* MSC small or medium model */
#    define SMALL_MEDIUM
#    ifdef _MSC_VER
#      define FAR _far
#    else
#      define FAR far
#    endif
#  endif
#  if (defined(__SMALL__) || defined(__MEDIUM__))
     /* Turbo C small or medium model */
#    define SMALL_MEDIUM
#    ifdef __BORLANDC__
#      define FAR _far
#    else
#      define FAR far
#    endif
#  endif
#endif

#if defined(WINDOWS) || defined(WIN32)
   /* If building or using zlib as a DLL, define ZLIB_DLL.
    * This is not mandatory, but it offers a little performance increase.
    */
#  ifdef ZLIB_DLL
#    if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500))
#      ifdef ZLIB_INTERNAL
#        define ZEXTERN extern __declspec(dllexport)
#      else
#        define ZEXTERN extern __declspec(dllimport)
#      endif
#    endif
#  endif  /* ZLIB_DLL */
   /* If building or using zlib with the WINAPI/WINAPIV calling convention,
    * define ZLIB_WINAPI.
    * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI.
    */
#  ifdef ZLIB_WINAPI
#    ifdef FAR
#      undef FAR
#    endif
#    include <windows.h>
     /* No need for _export, use ZLIB.DEF instead. */
     /* For complete Windows compatibility, use WINAPI, not __stdcall. */
#    define ZEXPORT WINAPI
#    ifdef WIN32
#      define ZEXPORTVA WINAPIV
#    else
#      define ZEXPORTVA FAR CDECL
#    endif
#  endif
#endif

#if defined (__BEOS__)
#  ifdef ZLIB_DLL
#    ifdef ZLIB_INTERNAL
#      define ZEXPORT   __declspec(dllexport)
#      define ZEXPORTVA __declspec(dllexport)
#    else
#      define ZEXPORT   __declspec(dllimport)
#      define ZEXPORTVA __declspec(dllimport)
#    endif
#  endif
#endif

#ifndef ZEXTERN
#  define ZEXTERN extern
#endif
#ifndef ZEXPORT
#  define ZEXPORT
#endif
#ifndef ZEXPORTVA
#  define ZEXPORTVA
#endif

#ifndef FAR
#  define FAR
#endif

#if !defined(__MACTYPES__)
typedef unsigned char  Byte;  /* 8 bits */
#endif
typedef unsigned int   uInt;  /* 16 bits or more */
typedef unsigned long  uLong; /* 32 bits or more */

#ifdef SMALL_MEDIUM
   /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */
#  define Bytef Byte FAR
#else
   typedef Byte  FAR Bytef;
#endif
typedef char  FAR charf;
typedef int   FAR intf;
typedef uInt  FAR uIntf;
typedef uLong FAR uLongf;

#ifdef STDC
   typedef void const *voidpc;
   typedef void FAR   *voidpf;
   typedef void       *voidp;
#else
   typedef Byte const *voidpc;
   typedef Byte FAR   *voidpf;
   typedef Byte       *voidp;
#endif

#ifdef HAVE_UNISTD_H    /* may be set to #if 1 by ./configure */
#  define Z_HAVE_UNISTD_H
#endif

#ifdef HAVE_STDARG_H    /* may be set to #if 1 by ./configure */
#  define Z_HAVE_STDARG_H
#endif

#ifdef STDC
#  ifndef Z_SOLO
#    include <sys/types.h>      /* for off_t */
#  endif
#endif

/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and
 * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even
 * though the former does not conform to the LFS document), but considering
 * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as
 * equivalently requesting no 64-bit operations
 */
#if -_LARGEFILE64_SOURCE - -1 == 1
#  undef _LARGEFILE64_SOURCE
#endif

#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0
#  define Z_LARGE
#endif

#if (defined(Z_HAVE_UNISTD_H) || defined(Z_LARGE)) && !defined(Z_SOLO)
#  include <unistd.h>       /* for SEEK_* and off_t */
#  ifdef VMS
#    include <unixio.h>     /* for off_t */
#  endif
#  ifndef z_off_t
#    define z_off_t off_t
#  endif
#endif

#if !defined(SEEK_SET) && !defined(Z_SOLO)
#  define SEEK_SET        0       /* Seek from beginning of file.  */
#  define SEEK_CUR        1       /* Seek from current position.  */
#  define SEEK_END        2       /* Set file pointer to EOF plus "offset" */
#endif

#ifndef z_off_t
#  define z_off_t long
#endif

#if !defined(_WIN32) && (defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0)
#  define z_off64_t off64_t
#else
#  if defined(_WIN32)
#    define z_off64_t __int64
#  else
#  define z_off64_t z_off_t
#endif
#endif

/* MVS linker does not support external names larger than 8 bytes */
#if defined(__MVS__)
  #pragma map(deflateInit_,"DEIN")
  #pragma map(deflateInit2_,"DEIN2")
  #pragma map(deflateEnd,"DEEND")
  #pragma map(deflateBound,"DEBND")
  #pragma map(inflateInit_,"ININ")
  #pragma map(inflateInit2_,"ININ2")
  #pragma map(inflateEnd,"INEND")
  #pragma map(inflateSync,"INSY")
  #pragma map(inflateSetDictionary,"INSEDI")
  #pragma map(compressBound,"CMBND")
  #pragma map(inflate_table,"INTABL")
  #pragma map(inflate_fast,"INFA")
  #pragma map(inflate_copyright,"INCOPY")
#endif

#endif /* ZCONF_H */



выполни поиск ZEXPORT
PM WWW   Вверх
ohos
Дата 11.2.2012, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 13.12.2010

Репутация: нет
Всего: нет



прошу прощения, но объявление ZEXPOR было первым, что я полез искать, откуда был взят указанный вами код zconf.h ? в файле от моего проекта он отличается, в частности я искал по "define ZEXPORT WINAPI" средствами визуал студии 2010 в текущем документе, после открытия zconf.h - и там нету

Код

 /* If building or using zlib with the WINAPI/WINAPIV calling convention,
    * define ZLIB_WINAPI.
    * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI.
    */
#  ifdef ZLIB_WINAPI
#    ifdef FAR
#      undef FAR
#    endif
#    include <windows.h>
     /* No need for _export, use ZLIB.DEF instead. */
     /* For complete Windows compatibility, use WINAPI, not __stdcall. */
#    define ZEXPORT WINAPI
#    ifdef WIN32
#      define ZEXPORTVA WINAPIV
#    else
#      define ZEXPORTVA FAR CDECL
#    endif
#  endif
#endif


судя по комменту в коде

Код

 * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI.


он от zlib1.dll более ранних версий, а в теме я указывал, что работаю со старой версией 1.1.3 - именно по ней вы можете подсказать? примерный исходник я прикладывал в архиве со всем проектом (примерный, потому-что у меня нет уверенности в том, что dll которая есть собрана именно из такого исходника, возможно он где-то отличался)

Это сообщение отредактировал(а) ohos - 11.2.2012, 17:26
PM MAIL   Вверх
boostcoder
Дата 11.2.2012, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(ohos @  11.2.2012,  17:24 Найти цитируемый пост)
откуда был взят указанный вами код zconf.h ?

из исходников zlib-1.2.6

у тебя возможно версия другая. но факт в том, что ZEXPORT объявлен не так, как в твоем предыдущем посте.

Цитата(ohos @  11.2.2012,  17:24 Найти цитируемый пост)
я указывал, что работаю со старой версией 1.1.3

ясно.

Цитата(ohos @  11.2.2012,  17:24 Найти цитируемый пост)
именно по ней вы можете подсказать?

что мешает самому собрать свежую версию? там делов на пять минут.


позже смогу глянуть твой архив.

PM WWW   Вверх
boostcoder
Дата 11.2.2012, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



пример в аттаче.
при использовании G++ собирать так:
>g++ -I. -DZLIB_DLL -DWINDOWS main.cpp -omain

для микрософтстудии - не знаю.


Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  test.zip 73,35 Kb
PM WWW   Вверх
ohos
Дата 11.2.2012, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 13.12.2010

Репутация: нет
Всего: нет



Цитата(boostcoder @ 11.2.2012,  17:46)
Цитата(ohos @  11.2.2012,  17:24 Найти цитируемый пост)

что мешает самому собрать свежую версию? там делов на пять минут.

необходимость, нужна именно старая и именно 1.1.3 smile
PM MAIL   Вверх
boostcoder
Дата 11.2.2012, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(ohos @  11.2.2012,  19:17 Найти цитируемый пост)
нужна именно старая и именно 1.1.3

враки. начиная с 0.96 все версии совместимы.
PM WWW   Вверх
boostcoder
Дата 11.2.2012, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



ohos, и чего ждешь? в архиве пример с твоей старой злибой ;)
PM WWW   Вверх
ohos
Дата 25.2.2012, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 13.12.2010

Репутация: нет
Всего: нет



boostcoder крайне признателен за пример), в вузе как раз с++ начался, некоторые вещи тоже стали более понятными, но у меня все же со студией осталась сейчас одна сложность, в куске кода:

Код

...
typedef ZEXPORT int(*inflateInit_t)(z_streamp);//убрал тут ", const char *, int", так как судя по zlib 1.1.3 
//эта функция берет только 1 параметр http://koeln.ccc.de/archiv/drt/zlib-manual.html#Advanced%20functions
...
int CAnotherTestDlg::inf(FILE *source, FILE *dest)
{
...
inflateInit_t infInit = (inflateInit_t)GetProcAddress(handle, "inflateInit_");
...
ret = infInit(&strm);
...
}
...


она пишет ошибку "Необработанное исключение в "0x10005cb0" в "AnotherTest.exe": 0xC0000005: Нарушение прав доступа при чтении "0xbf244736".", сама strm объявляется выше в той же функции

Код

...
z_stream strm;
...


strm не видна за пределами функции? но ведь & на сколько я знаю передает адрес (или ссылку) на уже существующие данные, а не создает копию, в чем может быть проблема?

Это сообщение отредактировал(а) ohos - 26.2.2012, 00:02
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0898 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.