簡體   English   中英

使用Microsoft Visual Studio在Windows 64位上為PostgreSQL數據庫創建C函數dll

[英]Creating a C function dll for PostgreSQL database on Windows 64 bit using Microsoft Visual Studio

我正在嘗試根據此處給出的說明創建我的第一個dll: https : //en.scribd.com/doc/40725510/Build-PostgreSQL-C-Functions-on-Windows該函數很簡單,並且可以在其他電腦。

#include "postgres.h"
#include "fmgr.h"
#include <windows.h>

#ifdef PG_MODULE_MAGIC
PG_MODULE_MAGIC;
#endif

#if defined(_WIN32)
#define DLLEXPORT __declspec(dllexport) 
#else
#define DLLEXPORT
#endif

#define WIN32_LEAN_AND_MEAN
#define NOCOMM

PG_FUNCTION_INFO_V1(fibbonachi);
DLLEXPORT Datum
fibbonachi(PG_FUNCTION_ARGS)
{
    int32 arg = PG_GETARG_INT32(0);
    if (arg > 0 && arg < 100)
    {
        if (arg == 1 || arg == 2)
            PG_RETURN_INT32(1);
        else
        {
            int arr[100];
            arr[0] = 1;
            arr[1] = 1;
            for (int i = 2; i < arg; i++)
                arr[i] = arr[i - 1] + arr[i - 2];
            PG_RETURN_INT32(arr[arg - 1]);
        }
    }
    else
        PG_RETURN_INT32(0);
}

只要我在配置管理器中將Win32用作Active Solution Platform,構建就會成功。 但是,當我嘗試通過以下代碼在pgAdmin中創建函數時:

CREATE or REPLACE FUNCTION fibbonachi(integer) RETURNS integer 
AS E'D:\\Homework\\Databases\\PostgreSQL_dll\\Debug\\PostgreSQL_dll.dll', 'fibbonachi'
LANGUAGE C STRICT;

我收到錯誤“%1不是有效的Win32應用程序”。 這是預料之中的,因為我使用的是64位版本的PostgreSQL。 但是,如果我將解決方案平台切換到x64(如果我沒有記錯的話,這是糾正錯誤所必需的),則嘗試構建progect會導致文件MSVCRTD.lib中出現32個“未解析的外部符號”錯誤。 我在這里找到了關於類似問題的討論: https : //social.msdn.microsoft.com/Forums/vstudio/en-US/c1553a42-7d1e-4c74-9156-95768a72e4df/unresolved-externals-after-upgradeing-from- vs2008-to-vs2010?forum = vcgeneral錯誤似乎是由不同版本的Visual Studio中的庫沖突引起的,但是重新安裝沒有幫助,我也不知道如何手動更正路徑(而且我仍然不完全是確保我的問題是相同的)。 我使用的路徑與指令中的路徑相同,但是它們使用的是64位版本的PostgreSQL:

C:\Program Files\Microsoft SDKs\Windows\v7.0\Include
C:\Program Files\PostgreSQL\9.3\include\server\port\win32
C:\Program Files\PostgreSQL\9.3\include\server\port
C:\Program Files\PostgreSQL\9.3\include\server
C:\Program Files\PostgreSQL\9.3\include\internal
+directory of dummy header libintl.h

關於如何成功構建x64 progect的任何想法?

嗯,我的同學檢查了我的設置,盡管有說明指出它們是必要的,但由於某些奇怪的原因,似乎包含路徑中的Microsoft SDK文件夾仍會導致這些錯誤。 他不記得他在哪里找到這些信息了。 盡管如此,問題已解決。 該項目成功構建,沒有到Microsoft SDKs文件夾的路徑,並且使用生成的dll成功在數據庫中創建了功能。 如果有人知道圖書館中發生這種沖突的原因,我仍然想知道。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM