64位Progress ABL调用libpcre2-8.dll找不到入口点_pcre2_compile@40
在Progress ABL中调用libpcre2-8.dll的pcre2_compile函数遇入口点找不到问题
我通过某Git仓库编译了64位的libpcre2-8.dll,现在尝试在64位Progress ABL程序中调用pcre2_compile函数,持续报错:
Could not find the entrypoint _pcre2_compile@40. (3260)
已尝试以下操作但未解决:
- 确认动态库和Progress环境均为64位
- 在ABL中设置
LIBRARY-CALLING-CONVENTION为STDCALL、CDECL或不指定,错误依旧
使用的Progress ABL代码片段(来自某仅支持32位环境的Git仓库):
PROCEDURE pcre2_compile : DEFINE INPUT PARAMETER pattern AS CHARACTER. /* const char * */ DEFINE INPUT PARAMETER options AS INTEGER. /* int */ DEFINE OUTPUT PARAMETER errcodeptr AS INTEGER. /* int * */ DEFINE OUTPUT PARAMETER errptr AS MEMPTR. /* const char ** */ DEFINE OUTPUT PARAMETER erroffset AS MEMPTR. /* int * */ DEFINE INPUT PARAMETER tableptr AS INTEGER. /* const unsigned char * */ DEFINE OUTPUT PARAMETER result AS MEMPTR. /* pcre * */ DEFINE VARIABLE libName AS CHARACTER NO-UNDO. DEFINE VARIABLE hCall AS HANDLE NO-UNDO. libName = get-library(). CREATE CALL hCall. ASSIGN hCall:CALL-NAME = "pcre2_compile" hCall:LIBRARY = "lib/libpcre2-8.dll" //hCall:LIBRARY-CALLING-CONVENTION = "STDCALL" hCall:CALL-TYPE = DLL-CALL-TYPE hCall:NUM-PARAMETERS = 6 hCall:RETURN-VALUE-DLL-TYPE = "MEMPTR". hCall:SET-PARAMETER(1, "CHARACTER", "INPUT" , pattern ). hCall:SET-PARAMETER(2, "LONG" , "INPUT" , options ). hCall:SET-PARAMETER(3, "HANDLE TO LONG" , "OUTPUT", errcodeptr ). hCall:SET-PARAMETER(4, "MEMPTR" , "OUTPUT", errptr ). hCall:SET-PARAMETER(5, "MEMPTR" , "OUTPUT", erroffset ). hCall:SET-PARAMETER(6, "LONG" , "INPUT" , tableptr ). hCall:INVOKE(). ASSIGN result = hCall:RETURN-VALUE. DELETE OBJECT hCall. END PROCEDURE.
更新:用Dependency Walker检查后发现,DLL中实际存在的函数是带_8后缀的pcre2_compile_8,但尝试调用这个名称后仍出现相同的入口点找不到错误。

内容的提问来源于stack exchange,提问作者Lieven Cardoen
相关产品推荐
相关产品推荐

