在Windows Vista上使用MSADO15.DLL和C ++与MinGW / GCC

时间:2010-04-27 10:08:15

标签: c++ gcc ado mingw windows-vista

引言

您好,

我是C ++的新手,是我的第一个陈述。

我最初使用VC ++ 2008 Express开始,我注意到GCC成为一种标准,所以我试图从一开始就做出正确的步骤事件。

我编写了一段通过ADO连接到MSSQL Server的代码,在VC ++上它通过导入MSADO15.dll就像魅力一样:

  

#import“msado15.dll”no_namespace rename(“EOF”,“EndOfFile”)

因为我要从VC ++迁移,所以我一直在寻找另一种(最终是多平台的)IDE,所以我坚持使用Code :: Block(我正在使用昨晚的构建, SVN 6181 )。

作为编译器,我选择在Vista下使用GCC 3.4.5(通过MinGW 5.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:警告:#import指令结束时的额外令牌
  在E:\ MyPath \ main.cpp中包含的文件中:2:
  c:\ Program Files \ Common Files \ System \ ADO \ msado15.dll:1:错误:stray'\ 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:错误:stray'\ 3'在程序中   c:\ Program Files \ Common Files \ System \ ADO \ msado15.dll:1:6:警告:忽略空字符
  c:\ Program Files \ Common Files \ System \ ADO \ msado15.dll:1:错误:stray'\ 4'在程序中   ...
  等等。

我的问题

嗯,显然在这个版本的GCC下#import指令不能完成预期的工作(GCC可能不再支持#import),所以最后我的问题:

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

3 个答案:

答案 0 :(得分:1)

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

#include <sql.h>

以及编译/链接时

g++ mystuff.cpp -lodbc32

获取导入库。

此外,您使用的MinGW编译器的版本非常旧。您可以在http://tdragon.net/recentgcc获得更新的更新信息。

答案 1 :(得分:1)

您尝试以非标准和MSVC特定的方式导入COM对象...

AFAIK COM与MSYS的支持远未开始完善,搜索:“组件对象模型”和google中的gcc。

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

答案 2 :(得分:0)

GCC和MSVC使用#import进行不同的事情。 在GCC中,#import是#include的Objective-c变体,只包含头文件一次。 在MSVC中,#import触发Microsoft扩展,该扩展从COM类型库构建智能指针实现和头文件。

在GCC中,您将不得不以旧式方式导入COM对象。查找现有的接口定义或使用OleSpy之类的工具从tlb生成定义。