PostgreSQL C ++ Api获取错误LNK1107:文件无效或损坏:无法读取0x2E8

时间:2014-06-14 17:20:59

标签: c# c++ postgresql winapi libpq

我从Simple C#App尝试libpqxxpg_bulkload来获取C ++数据批量加载器。 因为我的PC上的这两个库最终不受支持。 我现在,使用本机PostgreSQL libpq方法创建简单的DLL项目。

CPPApp.h

#pragma once  

#ifdef CPPAPP_EXPORTS
#define CPPAPP_API __declspec(dllexport)
#else
#define CPPAPP_API __declspec(dllimport)
#endif  

#include "libpq-fe.h"

extern CPPAPP_API PGconn* conn;

#ifdef __cplusplus
CPPAPP_API extern "C" {
#endif  

    void OpenDb(const char* connStr);

    void CloseDb(void);

    int getVersion(void);

#ifdef __cplusplus
}
#endif

CPPApp.cpp

 #include "stdafx.h"
#include "CPPApp.h" 
#include <iostream> 
using namespace std;

CPPAPP_API PGconn* conn = nullptr;

void OpenDb(const char* connStr)
{
    conn = PQconnectdb(connStr);

    if (PQstatus(conn) != CONNECTION_OK)
    {
        cout << "Connection to database failed." << endl;
        CloseDb();
    }

    cout << "Connection to database - OK" << endl;

}

void CloseDb(void)
{
    PQfinish(conn);
}

int getVersion(void)
{
    int version = PQserverVersion(conn);

    cout << "PostgreSQL version is " << version << endl;

    return version;
}

错误:错误LNK1107:文件无效或损坏:无法读取0x2E8

我能解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

当您尝试链接DLL(在本例中为libpq.dll而不是库(libpq.lib)时,通常会发生此错误。

假设您从enterprisedb pre-compiled binaries下载了PostgreSQL for Windows,那么安装目录中的lib目录位于libpq.lib。这是您要指示为Visual Studio项目的外部库的文件。