我的odbc api函数未从ODBC测试中调用

问题描述 投票:0回答:1

在过去的两周中,我一直在努力实现自定义odbc函数。这是我的位置。我设法实现设置功能,一切正常。我可以创建DSN,它将调用我的ConfigDSN函数,它将在ODBC.INI下的注册表中注册我的ODBC,并将设置驱动程序键和指向我的customOdbcApi.dll的值。

问题是,当我尝试连接到我的DSN时,它没有调用任何函数,例如SQLConnect。

这是我尝试连接到我的“ AiPandaOdbc”时收到的回复enter image description here

但是在我的函数中,我实现了一个消息对话框,该对话框应该弹出,并且我从函数-2(C0)返回0”>

我到目前为止检查的内容:

注册表中的路径正确,它指向odbcDriver.dll

我添加了.def文件,在其中添加了要导出的所有功能。

enter image description here

唯一非常有趣的是,如果我将MessageBox调用放在DllMain中,则会显示消息框,因此我的dll被100%确认。

我缺少什么或忘记添加什么以便调用我的函数?

编辑:我也尝试过使用控制台应用程序,但仍然没有,SQLAllocHandle返回0,但是SQLConnect返回-1 enter image description here

编辑2:

我添加了#undef UNICODE,因此请确保他调用SQLConnect而不是SQLConnectW。但是问题仍然存在。仍然没有调用我的SQLConnect。

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

由于某种原因,即使我放了#undef UNICODE,他仍然继续调用SQLConnectW

编辑-我尝试添加SQLConnectW函数并导出它,但仍然没有。

<html> <head></head> <body> <h1>ODBC TRACE LOG</h1> <textarea style="width:90%;height:900px;"> ConsoleApplicat 3120-6500 ENTER SQLAllocHandle SQLSMALLINT 1 <SQL_HANDLE_ENV> SQLHANDLE 0x00000000 SQLHANDLE * 0x00A5C138 ConsoleApplicat 3120-6500 EXIT SQLAllocHandle with return code 0 (SQL_SUCCESS) SQLSMALLINT 1 <SQL_HANDLE_ENV> SQLHANDLE 0x00000000 SQLHANDLE * 0x00A5C138 ( 0x00DD7938) ConsoleApplicat 3120-6500 ENTER SQLSetEnvAttr SQLHENV 0x00DD7938 SQLINTEGER 200 <SQL_ATTR_ODBC_VERSION> SQLPOINTER 3 <SQL_OV_ODBC3> SQLINTEGER 0 ConsoleApplicat 3120-6500 EXIT SQLSetEnvAttr with return code 0 (SQL_SUCCESS) SQLHENV 0x00DD7938 SQLINTEGER 200 <SQL_ATTR_ODBC_VERSION> SQLPOINTER 3 <SQL_OV_ODBC3> SQLINTEGER 0 ConsoleApplicat 3120-6500 ENTER SQLAllocHandle SQLSMALLINT 2 <SQL_HANDLE_DBC> SQLHANDLE 0x00DD7938 SQLHANDLE * 0x00A5C13C ConsoleApplicat 3120-6500 EXIT SQLAllocHandle with return code 0 (SQL_SUCCESS) SQLSMALLINT 2 <SQL_HANDLE_DBC> SQLHANDLE 0x00DD7938 SQLHANDLE * 0x00A5C13C ( 0x00DD79B8) ConsoleApplicat 3120-6500 ENTER SQLConnectW HDBC 0x00DD79B8 WCHAR * 0x00DD04D0 [ -3] "AiPandaODBC\ 0" SWORD -3 WCHAR * 0x73382440 [ -3] "******\ 0" SWORD -3 WCHAR * 0x73382440 [ -3] "******\ 0" SWORD -3 ConsoleApplicat 3120-6500 EXIT SQLConnectW with return code -1 (SQL_ERROR) HDBC 0x00DD79B8 WCHAR * 0x00DD04D0 [ -3] "AiPandaODBC\ 0" SWORD -3 WCHAR * 0x73382440 [ -3] "******\ 0" SWORD -3 WCHAR * 0x73382440 [ -3] "******\ 0" SWORD -3 DIAG [IM001] [Microsoft][ODBC Driver Manager] Driver does not support this function (0) ConsoleApplicat 3120-6500 ENTER SQLFreeHandle SQLSMALLINT 1 <SQL_HANDLE_ENV> SQLHANDLE 0x00A5C138 ConsoleApplicat 3120-6500 EXIT SQLFreeHandle with return code -2 (SQL_INVALID_HANDLE) SQLSMALLINT 1 <SQL_HANDLE_ENV> SQLHANDLE 0x00A5C138 ConsoleApplicat 3120-6500 ENTER SQLFreeHandle SQLSMALLINT 2 <SQL_HANDLE_DBC> SQLHANDLE 0x00A5C13C ConsoleApplicat 3120-6500 EXIT SQLFreeHandle with return code -2 (SQL_INVALID_HANDLE) SQLSMALLINT 2 <SQL_HANDLE_DBC> SQLHANDLE 0x00A5C13C </textarea> </body> </html>

在过去的两周中,我一直在努力实现自定义odbc函数。这是我的位置。我设法实现设置功能,一切正常。我可以创建DSN,并且它是...

c++ api dll odbc
1个回答
1
投票

要么调用SQLConnectW并传递实际的SQLWCHAR DSN字符串,要么调用SQLConnectA以显式调用ANSI函数,或者在构建代码时取消定义UNICODE(将#undef UNICODE添加到源代码的顶部,以防止对SQLConnect的调用被静默映射到SQLConnectW 。

© www.soinside.com 2019 - 2024. All rights reserved.