赋值不在DLL导出的C ++类中工作

时间:2010-05-11 16:51:23

标签: visual-c++

使用VS 2008 有一个C ++类,我在其中调用来自第三方dll的函数。头文件中的定义如下:

namespace OITImageExport
{
class ImageExport
{
private:
    SCCERR      seResult;       /* Error code returned. */
    VTHDOC      hDoc;           /* Input doc handle returned by DAOpenDocument(). */
    VTHEXPORT   hExport;        /* Handle to the export returned by EXOpenExport(). */
    VTDWORD     dwFIFlags;      /* Used in setting the SCCOPT_FIFLAGS option. */
    VTCHAR      szError[256];   /* Error string buffer. */
    VTDWORD     dwOutputId;     /* Output Format. */
    VTDWORD     dwSpecType;
public:
    ImageExport(const char* outputId, const char* specType);
    void ProcessDocument(const char* inputPath, const char* outputPath);
    ~ImageExport();
};
}  

在构造函数中,我初始化两个类字段,其值来自第三方dll中的枚举:

ImageExport::ImageExport(const char* outputId, const char* specType)
{
if(outputId == "jpeg") 
{
    dwOutputId = FI_JPEGFIF;
     }
        if(specType == "ansi")
{
    dwSpecType = IOTYPE_ANSIPATH;
}
     seResult = DAInit();
if (seResult != SCCERR_OK)
{
    DAGetErrorString(seResult, szError, sizeof(szError));
    fprintf(stderr, "DAInit() failed: %s (0x%04X)\n", szError, seResult);
    exit(seResult);
}
 }  

当我在控制台应用程序中使用此类时,在另一个文件中使用main方法(所有在同一名称空间中),实例化类对象并调用方法,它就像一个冠军。所以,既然我知道基本代码可以工作,我使用类头和代码文件打开一个dll项目。当然我要添加dll宏,即:

#ifdef IMAGEDLL_EXPORTS
#define DLL __declspec(dllexport)
#else
#define DLL __declspec(dllimport)
#endif  

并将类定义更改为“类DLL ImageExport”。很好地编译了一个DLL和.lib文件(没有错误,没有警告)。现在测试这个dll我使用与之前相同的main方法打开另一个控制台项目并链接到(dll)lib文件。有问题,追查时是两个字段未设置的结果;两者的值都为0.返回第一个控制台应用程序并打印出值:dwOutputId为1535(#define FI_JPEGFIF 1535),dwSpecType为2(#define IOTYPE_ANSIPATH 2)。

现在,如果我在课外分配这些值,我可以看到可见性如何不同,但为什么dll中的赋值不起作用?这是在dll中有一个类吗?

1 个答案:

答案 0 :(得分:1)

此:

if(outputId == "jpeg") 

应该是:

if(strcmp( outputId, "jpeg" ) == 0 ) 

和其他地方一样。您正在比较指针,这可能(取决于您的编译器,月亮的相位等)可能是“jpeg”文字的不同副本。