• 15388阅读
  • 12回复

QT如何使用VC开发的lib库 [复制链接]

上一主题 下一主题
离线donixli1314
 

只看楼主 倒序阅读 楼主  发表于: 2009-10-15
想知道qt中如何使用VC开发的lib库
目前所做的步骤有:
在.pro文件中加入
INCLUDEPATH += H:/OutPut
LIBS += -LH:/OutPut/Release -ltestlib

H:/OutPut中包含头文件
H:/OutPut/Release包含lib文件
testlib是lib文件的文件名
然后在程序中包含了头文件
掉用方法时提示 方法未定义

请问有没有谁知道如何调用?
离线dbzhang800

只看该作者 1楼 发表于: 2009-10-15
贴下具体出错信息吧。根据你的描述,估计大家连是编译错误还是链接错误都无法判断
离线donixli1314

只看该作者 2楼 发表于: 2009-10-15
图片是错误信息和头文件
其中头文件里的那个方法是lib里面的
离线donixli1314

只看该作者 3楼 发表于: 2009-10-15
头文件
离线donixli1314

只看该作者 4楼 发表于: 2009-10-15
这是调用部分
离线dbzhang800

只看该作者 5楼 发表于: 2009-10-15
直接指定全路径试试呢?
LIBS += G:/......../*.lib
离线donixli1314

只看该作者 6楼 发表于: 2009-10-15
还是不行
我现在换成
INCLUDEPATH += H:/OutPut
LIBS += H:/OutPut/Release/testlib.lib

如果把调用的方法DoWipe ()注释掉,就没问题
但是不注释的话还是提示相同的错误
离线donixli1314

只看该作者 7楼 发表于: 2009-10-15
在google上查了就是只要把
INCLUDEPATH += H:/OutPut
LIBS += H:/OutPut/Release/testlib.lib
这两个+上就可以用了
但我这也不知道是咋回事
离线dbzhang800

只看该作者 8楼 发表于: 2009-10-15
一般情况下,

1. GCC和VC都使用COFF格式,所以VC中的.obj .lib与gcc在WINDOWS下用的.o .a是一样的,只是扩展名不一样。

2.MinGW附带了转换工具reimp.exe,在MinGW\bin目录下,文档在MinGW\doc\reimp目录下,
可以直接将 .lib 转为 .a

但你碰到的很可能就是例外
离线donixli1314

只看该作者 9楼 发表于: 2009-10-15
还是不行
我把代码贴出来,希望各位多多指点
****************************************************************
filesmas.pro文件

TEMPLATE = app
TARGET = FileSmash
QT        += core gui
HEADERS   += filesmash.h
SOURCES   += main.cpp \
    filesmash.cpp
FORMS     += filesmash.ui    
RESOURCES +=
INCLUDEPATH += H:/LibTest/include
LIBS      += H:/LibTest/lib/wipelib.a
********************************************************************************
filesmash.h文件

#ifndef FILESMASH_H
#define FILESMASH_H

#include "ui_filesmash.h"
#include <qt_windows.h>

class FileSmash : public QWidget
{
  Q_OBJECT

public:
  FileSmash(QWidget *parent = 0);
  ~FileSmash();

private:
  void QStringToTchar (const QString& str, TCHAR buf[]);

private:
  Ui_FileSmashClass* ui;
};

#endif // FILESMASH_H
*********************************************************************
filesmash.cpp文件

#include "filesmash.h"
//#include <QDebug>
#include "H:\\LibTest\\include\\export.h"
FileSmash::FileSmash(QWidget *parent)
    : QWidget(parent)
{
  ui = new Ui_FileSmashClass;
    ui->setupUi(this);

    TCHAR filePath [255];
    memset (filePath, 0, 255);

    QString s = "G:\aaaa.txt";
    QStringToTchar (s, filePath);

    DoWipe (filePath);
}


FileSmash::~FileSmash()
{
  delete ui;
}

void FileSmash::QStringToTchar (const QString& str, TCHAR buf[])
{
#if defined (UNICODE) || defined (_CL_HAVE_WCHAR_H) && defined (_CL_HAVE_WCHAR_T)
  str.toWCharArray (buf);
#else
  const QByteArray ba = str.toLocal8Bit ();
  strcpy (buf, ba.constData ());
#endif
}
******************************************************************************
export.h文件


BOOL DoWipe(TCHAR *szPath);  //FALSE 函数执行完毕
*****************************************************************************
生成wipelib.a的过程
C:\Documents and Settings\Administrator>cd H:\LibTest\lib
C:\Documents and Settings\Administrator>H:
H:\LibTest\lib>reimp -d wipelib.lib
H:\LibTest\lib>dlltool -k -d wipelib.def -l wipelib.a
******************************************************************************
wipelib.def文件

EXPORTS
DoWipe @1
*******************************************************************************
wipelib.lib大小为115kb
生成的wipelib.a的大小为3kb
离线donixli1314

只看该作者 10楼 发表于: 2009-10-15
不要沉啊!
另外的问题
网上说 reimp -d wipelib.lib命令能生成个.def文件
但我 运行
H:\LibTest\lib>reimp -d wipelib.lib却没有任何.def文件生成 (没有错误产生)
只是回到H:\LibTest\lib>这一步
这又是为什么?
离线harry6516
只看该作者 11楼 发表于: 2010-05-13
我也有这个问题了~~bd
test
离线downstairs

只看该作者 12楼 发表于: 2011-06-12
喜爱编程的猫头鹰
快速回复
限100 字节
 
上一个 下一个