使用VC6.0编译器,关闭时,出现:

曾以为Windows版本的MySQL存在不能使用UDF的BUG诸提交了一个bug报告。不过
似乎发现是我搞错了,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.

  VC++6.0 下搭建 wxWidgets 开发环境

You cannot close the workspace while a build is in progress. Select the
stop Build command before closing the workspace

  • Open the mysqld.dsw workspace.
  • Add New project to the workspace
  • Project name: my_udf
  • Select Win32 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 <stdlib.h>
    #include <winsock.h>
    #include <mysql.h>
    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 1.0
    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 F7 for to build the DLL.
  • Copy the my_udf.dll to the environment path directory:
    winntsystem32 for example.
  • Start the mysql client and issue:
    C:mysql-udf in>mysql -uroot -p

  GTK、QT、SWT、SWING 一样,wxWidgets 也是一种开源跨平台的 GUI 框架。

解决方案:

  因 wxWidgets 和 MFC 有些渊源,有些亲近,故要体验一番 wxWidgets。

One advice is to update to the latest service pack (SP6).
更新服务包。

  现在最新版是 2.8.8。wxWidgets 程序还可运行于 Windows CE、Palm OS。

  1. Do not build simultaneously in multiple instances.
  2. Do not run any other instance while one is building silently.
  3. Do not start VS/VC by double-clicking .dsw files.
    1.不要同时建立多个实例
    2.不要运行其他实例,当一个还在建立时。
    3.不要双击.dsw打开VS/VC

  不但包括 GUI,还有 Media、Socket、ODBC 等库。

以上方法,没有试过。

  详情请见 wxWidgets 的官方网站是:
VC++6.0 下如何搭建 wxWidgets 的开发环境,包括编译 wxWidgets 源码和配置
VC 环境。

我的建议是安装VC6英文版,再打个sp6补丁~~~~

  所用 wxWidgets 的版本是 2.8.8。

  第一步:下载并安装 wxWidgets

  在 下载到 wxWidgets 源码。

  你可以下载 Windows 安装版

(11.9M)

  或者是 Zip 压缩版
(15.9M)

  假如我们下载的是
wxMSW-2.8.8-Setup.exe,就可运行它,过程中我们假定选择的安装目录是C:Program
FileswxWidgets-2.8.8。

  完成后,我们看到安装目录所在空间的大不是 127M。

  第二步:编译 wxWidgets

  编译方式有两种,一种是用 nmake 在命令行下编译。一种是在 VC++ 中打开
wx.dsw 进行编译,

  1) nmake 编译

  运行 cmd.exe 来到命令行下,进入到目录 d:wxWidgets-2.8.8,然后执行

  D:wxWidgets-2.8.8>nmake -f makefile.vc

  默认是编译成 DEBUG 版的静态库。

  如果你想生成动态库,或生成的是 Release 版的,你可以修改
D:wxWidgets-2.8.8buildmswconfig.vc 文件。

  打开该文件你能看到可以更改的选项,其中重要的几个如下:

  # What type of library to build? [0,1] —
生成库的类型,0为静态库,1为动态库

  SHARED = 0

  # Compile Unicode build of wxWidgets? [0,1] — 是否使和
UNICODE,0 否,1 是

  UNICODE = 0

  # Type of compiled binaries [debug,release] — 是 debug 还是
release

  BUILD = debug

  其中还有许多顾名思义的选项,请根据需求修改。

  对于 config.vc
中的选项也可以通过命令行覆盖掉配置文件中的值,如编译命令用D:wxWidgets-2.8.8>nmake
-f makefile.vc SHARED=1 UNICODE=1 BUILD=release就是编译 release 版,支持
UNICODE 的动态库了。

  动态库和静态库的不同体现在使用上,静态库中的代码能编译进应用程序的
exe 文件中,这个 exe 文件可单独发布,但体积较庞大。

  动态库可让 exe 文件执行时加载,虽然 exe
文件体积小了,但发布时必须带着相应的动态库文件。

  2) VC 编译

  还 可用 VC++ 打开 D:wxWidgets-2.8.8buildmswwx.dsw,然后选择
Build->Batch Build… ,我们看到每个工程都有 16
个配置,请根据应用需求勾选你的配置,如所有工程的 Win32 Release 和 Win32
Debug 版本,然后
Build,如果你照单全收,编译将非常耗时而占空间。这种编译方式就是可以一下操作帮你编译出所有需要的版本。好,
等等编译完之后,在目录 D:wxWidgets-2.8.8lib
会有产生一个目录:vc_lib 是静态库的目录,默认编译有 17 个静态。

  如果是编译成动态库则会产生目录 vc_dll。

  在 vc_lib 中有 mswd 目录,release 版对应的是 msw,里面含有 Debug 和
Release 版的 setup.h。

  注意到 Debug 版和 Release 以及和 UNICODE
、动态库、静态库组合条件编译生成的文件和目录名。

  静态库编译到 D:wxWidgets-2.8.8libvc_lib 目录中

  动态库编译到 D:wxWidgets-2.8.8libvc_dll 目录中

  文件命名为 wxmsw28d_core.lib 文件为例:

  wxmsw28_core.lib —- Release,非 UNICODE 版

  wxmsw28d_core.lib —- Debug,非 UNICODE 版

  wxmsw28u_core.lib —- Release,UNICODE 版

  wxmsw28ud_core.lib —- Debug,UNICODE 版

  对于 dll 文件的命名规范也一样的。

  在 vc_lib 和 vc_dll
下如果全编译了会有四个目录,msw、mswd、mswu、mswud 意义同上。

  编译完后可以把那些过程中的目标文件删了,它们占的空间实在是太大。

  要是你还想以后重新编译用就留着吧。

  第三步:测试VC++6.0是否能编译 wxWidgets sample project

  a.为VC++6.0添加wxWidgets的LIB和INCLUDE 文件路径

  项目配置 Additional Include Directories 和 Additional library path。

  并且在下面前两个 Include Files 放在全局设置里也较合适。

  进到 VC++ 的 Tools->Options->Directories,选择 “Include Files”
后,添加

  D:wxWidgets-2.8.8include

  D:wxWidgets-2.8.8contribinclude

  D:wxWidgets-2.8.8libvc_libmswd

  对应于 Project Settings -> C/C++ Tab->Preprocessor 中的
Additional include directories

  再选择 “Libraries Files”,添加

  D:wxWidgets-2.8.8vc_lib

  b.编译并运行minimal.dsw程序

  open workspace :C:Program
FileswxWidgets-2.8.8samplesminimal minimal.dsw

  编译OK并运行,就说明配置正常!

  第四步:创建Win32 Application wxWidgets 项目wxHello

  创建一个 Win32 Application 的空项目,项目名为 wxHello

  Proejct->Settings (Alt+F7) 进入项目设置

  1. C/C++选项卡->Code Generation -> use run-time library
设置为: Debug MutilThread DLL

  2. C/C++选项卡-> PreProcessor -> PreProcessor Definitions

  设置加上 __WXMSW__,__WXDEBUG__ ,如果是 Release 版,则只需加上
__WXMSW__。

  3. C/C++选项卡-> PreProcessor -> Additional include
directories

  设置为
D:wxWidgets-2.8.8include,D:wxWidgets-2.8.8includelibvc_libmswd,
这是设置附加 Include 路径。

  4. Link 选项卡-> Input -> Object/library modules

  设置加上 wxmsw28d_core.lib wxbase28d.lib wxtiffd.lib wxjpegd.lib
wxpngd.lib wxzlibd.lib wxregexd.lib wxexpatd.lib

  这些 Lib(没有这四个 lib comctl32.lib rpcrt4.lib winmm.lib
wsock32.lib 的话请加上,关键是前两个)。

  如果要使用 wxODBC 就加上 wxbase28d_odbc.lib。

  5. Link 选项卡-> Input -> Addtional library path 设置为:
D:wxWidgets-2.8.8libvc_lib。

  注意:编译成不同版的执行代码应填入相应的 Additional include
directories 和 Addtional library path。

  编译成依赖 DLL 的执行文件还需要加上预处理指令 WXUSINGDLL用UNICODE
编译则需要加上预处理指令 _UNICODE

  还有一种 Universal 编译,要加上预处理指令
__WXUNIVERSAL__这样一个普通的WxWdigets项目就设置好了.

  我们测试 WxWidgets 自带的例子 minimal。新建一个 minimal.cpp 文件,

  内容同
D:wxWidgets-2.8.8samplesminimalminimal.cpp,编译,不出意外,成功了!

  Release 静态库版(vc_msw) minimal.exe 1.11M,可单独发布

  Debug 静态库版(vc_mswd) minimal.exe 2.52M,可单独发布

  Release 动态库版(vc_mswdll) minimal.exe
68K,加上wxmsw28_core_vc_custom.dll (2.85M) 和
wxbase28_vc_custom.dll (1.11M),共 4M。Debug 动态库版(vc_mswddll)
minimal.exe 96K,加上wxmsw28d_core_vc_custom.dll (4.26M) 和
wxbase28d_vc_custom.dll (1.82M),共 6.1M。这是一个简单的 wxWidgets
程序,只用到了两个动态库的情况。

  在用到 wxWidgets
库较少时用静态库来编译发布文件会小一些,若是用到组件多的时候,可能用动态库方便些,请酌情决定。