C++ 使用MSADO15.DLL和C++;在Windows Vista上使用MinGW/GCC 介绍

C++ 使用MSADO15.DLL和C++;在Windows Vista上使用MinGW/GCC 介绍,c++,gcc,ado,mingw,windows-vista,C++,Gcc,Ado,Mingw,Windows Vista,嗨 我最初是从VC++2008 Express开始的,我注意到GCC已经成为一种标准,所以我试图从一开始就制定正确的步骤 我已经编写了一段代码,通过ADO连接到MSSQL服务器,在VC++上,通过导入MSADO15.dll,它的工作非常出色: #导入“msado15.dll”无名称空间重命名(“EOF”、“EndOfFile”) 因为我将从VC++开始,我一直在寻找一个替代(最终是多平台)IDE,所以我(这次)坚持使用Code::Block(我使用的是昨晚的buil,SVN 6181) 作为编

<我对C++是很新的,是我的第一个陈述。< /P> 我最初是从VC++2008 Express开始的,我注意到GCC已经成为一种标准,所以我试图从一开始就制定正确的步骤

我已经编写了一段代码,通过ADO连接到MSSQL服务器,在VC++上,通过导入MSADO15.dll,它的工作非常出色:

#导入“msado15.dll”无名称空间重命名(“EOF”、“EndOfFile”)

因为我将从VC++开始,我一直在寻找一个替代(最终是多平台)IDE,所以我(这次)坚持使用Code::Block(我使用的是昨晚的buil,SVN 6181)

作为编译器,我选择在Vista下使用GCC 3.4.5(通过MingW5.1.6移植)

我试图用GCC编译一个简单的“hello world”应用程序,该应用程序使用/导入相同的msado15.dll(#import“c:\Program Files\Common Files\System\ADO\msado15.dll”no_namespace rename(“EOF”,“EndOfFile”)),我惊讶地看到许多编译时错误

我希望#import编译器的指令将从“msado15.dll”生成一个库,以便它可以稍后链接到它(链接编辑时间或其他)。相反,它试图将其作为普通文件(如头文件,如果您愿意)读取,因为它试图解释DLL中的每一行(具有MZ签名):

例如:

编译:main.cpp
E:\MyPath\main.cpp:2:64:警告:导入指令末尾有额外的令牌
在包含在E:\MyPath\main.cpp:2:
c:\Program Files\Common Files\System\ADO\msado15.dll:1:错误:程序中出现“\144” 在包含在E:\MyPath\main.cpp:2中的文件中: c:\Program Files\Common Files\System\ADO\msado15.dll:1:4:警告:忽略空字符
c:\Program Files\Common Files\System\ADO\msado15.dll:1:错误:程序中出现“\3” c:\Program Files\Common Files\System\ADO\msado15.dll:1:6:警告:忽略空字符
c:\Program Files\Common Files\System\ADO\msado15.dll:1:错误:程序中出现“\4” …
等等

我的问题 很明显,在这个版本的GCC下,#import指令不能完成预期的工作(也许#import不再受GCC支持),所以最后我的问题是:

    如何在GCC(V3.4.5)编译的C++程序中使用ADO访问MSSQL数据库?

导入指令不是标准C++编程语言的一部分。我不知道它在GCC中做了什么(如果有的话)。使用DLL的正常方法是在代码中包含其头文件,然后链接到其导入库(即.LIB文件)。我从来没有用ADO编程,但用ODBC你会的

#include <sql.h>
获取导入库

另外,您正在使用的MinGW编译器的版本非常旧。您可以在。

GCC和MSVC使用#导入不同的内容来获取更为最新的。 在GCC中,#import是#include的objective-c变体,它只包含一次头文件。 在MSVC中,#import触发Microsoft扩展,该扩展从COM类型库构建智能指针实现和头文件


在GCC中,您必须以老式的方式导入COM对象。查找现有接口定义或使用类似OleSpy的工具从tlb生成定义。

您尝试以非常非标准和MSVC特定的方式导入COM对象时会发生什么情况

AFAIK对COM和MSYS的支持还远远不够完美,在google中搜索“组件对象模型”和gcc


我建议使用或类库与MS-SQL进行通信。它也是跨平台的

MSYS与此有什么关系?谢谢您这么快的回复。我担心你会这么说,克里斯·贝克和尼尔·巴特沃斯(见下面的回复)已经指出了根本问题。谢谢,我将尝试使用FreeTDS,因为我对以前的一些PHP“项目”有点熟悉。您好,您完全正确,我已经在维基百科的一篇文章中找到了这个解释。非常感谢。您好,我尝试使用(在您发布答案前几分钟)gcc附带的sql.h头。看起来不错,我有点固执地坚持使用ADO,因为我已经有了一个小应用程序,它可以用MSVC++编译。我还安装了cygwin,并尝试从msado15.dll文件生成.a库。nm bash命令只是说“msado15.dll中没有符号”,因此似乎dll符号已被剥离。我看到了TDM-GCC网页,但我不愿意使用它,因为它是“非官方的”。我试试看。谢谢。
g++ mystuff.cpp -lodbc32