我尝试用C++ Builder2010为FireBird2.5创建一个简单的用户定义函数(UDF),但我无法让它在Firebird中工作。
FBUDFMBD.dll中生成DLL FBUDFMBD.dll使用工具GExperts - PE信息,我可以看到我的UDF是DLL-导出MYFUNC序号$1和入口点$1538。
我做错了什么,Firebird不能正确注册我的DLL和它的UDF?
我的DLL项目中是否有任何关于默认编译器选项的更改?
发布于 2016-07-22 05:28:04
在Delphi中,您可以编写cdecl而不是stdcall。
i.e
function ExisteBase(const aBase:PChar):Integer; cdecl;不
function ExisteBase(const aBase:PChar):Integer; stdcall;也许在C++ __cdecl上
我希望我能帮上忙
发布于 2016-07-22 10:25:10
非常感谢!我得到了你的帮助。
前2名:更正的C++代码是:
extern "C" __declspec(dllexport) int MYFUNC ( int * val )
{
int result = 2 * *val;
return result;
}注意输入参数的引用调用。
顶级4:在FireBird2.5db中注册UDF
DECLARE EXTERNAL FUNCTION F_MYFUNC
INTEGER
RETURNS INTEGER BY VALUE
ENTRY_POINT '_MYFUNC' MODULE_NAME 'FBUDFMBD';注意函数名的前导下划线!
前5名: select F_MYFUNC( 3 ) from RDB$DATABASE;工作得很好!
https://stackoverflow.com/questions/38508901
复制相似问题