您现在的位置是:首页
>
windows驱动开发 在Windows上的MySQL UDF开发应用
在Wi dow 上的MySQL UDF开发应用 曾以为Wi dow 版本的MySQL存在不能使用UDF的BUG诸提交了一个 ug报告 不过似乎发现是我搞错了 MySQL的技术支持人员给了非常完美的

在Windows上的MySQL UDF开发应用
曾以为Windows版本的MySQL存在不能使用UDF的BUG诸提交了一个bug报告 不过似乎发现是我搞错了 MySQL的技术支持人员给了非常完美的解答 同大家分享一下 下边是原文回复 用户你好 抱歉 这并不是一个bug 下面我粘贴一个以前为某个客户做的简例 假设你有了VC++ 源码分发 并且有一个正常运行的MySQL服务器 我将创建一个UDF它将一个名字: 注意:例子非常简陋 目的是让你了解该如何处理手头的UDF 打开 mysqld dsw 工作区 添加新项目到这个工作区 Project name: my_udf // 项目名称:my_udf 选择 Win Dynamic Link Library // Win 动态连接库 点击 OK 选择 An Empty DLL project // 一个空DLL项目 点击 Finish 点击 OK 添加新文件 my_udf cpp 到项目中: #include #include #include extern C { char *my_name(UDF_INIT *initid UDF_ARGS *args char *is_null char *error); // 兼容C } char *my_name(UDF_INIT *initid UDF_ARGS *args char *is_null char *error) { char * me = my name ; return me; // 调用此UDF将返回 my name } 按 Ctrl+N 来创建一个新文件 选择 text 类型 File name: my_udf def file://文件名:my_udf def 按照下边的内容编辑文件 LIBRARY UDF_EXAMPLE DESCRIPTION Example Using UDF with VC++ VERSION EXPORTS my_name 右击my_udf项目并选择Settings 点 C/C++ 选项卡 选择 General 添加宏 HAVE_DLOPE 到预处理器定义 选择 Preprocessor 添加头文件路径: Additional Include directories 例如: /include 按 F 去编译成 DLL 复制 my_udf dll 到环境变量path定义过的目录 比如 winntsystem 打开mysql客户端 C:mysql udfbin>mysql uroot p Enter password: Wele to the MySQL monitor Commands end with ; or g Your MySQL connection id is to server version: max nt Type help; or h for help Type c to clear the buffer mysql> CREATE FUNCTION my_name RETURNS STRING SONAME my_udf dll ; Query OK rows affected ( sec) mysql> select my_name(); mysql> drop function my_name; Query OK rows affected ( sec) 以下是MySQL技术人员的回信原文 Sorry this isn t a bug Below I pasted a sample I did sometime ago for another user: Ok Assuming you have VC++ and the source distribution and a server running I will create a UDF that returns a name: Note: the sample is ugly but the purpose here is to show you how to handle the UDF Open the mysqld dsw workspace Add New project to the workspace Project name: my_udf Select Win Dynamic Link Library Click OK Select An Empty DLL project Click Finish Click OK Add a new file called my_udf cpp to the project: #include #include #include extern C { char *my_name(UDF_INIT *initid UDF_ARGS *args char *is_null char *error); } char *my_name(UDF_INIT *initid UDF_ARGS *args char *is_null char *error) { char * me = my name ; return me; } Type Ctrl+N for to create a new file Select text type File name: my_udf def Edit the above file with the below contents: LIBRARY UDF_EXAMPLE DESCRIPTION Example Using UDF with VC++ VERSION EXPORTS my_name Right Click the my_udf project and select Settings Click the C/C++ tab Select General in the Category Combo Add the macro HAVE_DLOPEN to the PreProcessor definition Select Preprocessor in the Category Combo Add the include path to the text box: Additional Include directories e g: /include Press F for to build the DLL Copy the my_udf dll to the environment path directory: winntsystem for example Start the mysql client and issue: C:mysql udfbin>mysql uroot p Enter password: Wele to the MySQL monitor Commands end with ; or g Your MySQL connection id is to server version: max nt Type help; or h for help Type c to clear the buffer mysql> CREATE FUNCTION my_name RETURNS STRING SONAME my_udf dll ; Query OK rows affected ( sec) mysql> select my_name(); mysql> drop function my_name; Query OK rows affected ( sec) lishixinzhi/Article/program/MySQL/201311/29409 很赞哦! (1052)