在过去的两周中,我一直在努力实现自定义odbc函数。这是我的位置。我设法实现设置功能,一切正常。我可以创建DSN,它将调用我的ConfigDSN函数,它将在ODBC.INI下的注册表中注册我的ODBC,并将设置驱动程序键和指向我的customOdbcApi.dll的值。
问题是,当我尝试连接到我的DSN时,它没有调用任何函数,例如SQLConnect。
这是我尝试连接到我的“ AiPandaOdbc”时收到的回复
但是在我的函数中,我实现了一个消息对话框,该对话框应该弹出,并且我从函数-2(C0)返回0”>
我到目前为止检查的内容:
注册表中的路径正确,它指向odbcDriver.dll
我添加了.def文件,在其中添加了要导出的所有功能。
唯一非常有趣的是,如果我将MessageBox调用放在DllMain中,则会显示消息框,因此我的dll被100%确认。
我缺少什么或忘记添加什么以便调用我的函数?
编辑:我也尝试过使用控制台应用程序,但仍然没有,SQLAllocHandle返回0,但是SQLConnect返回-1
编辑2:
我添加了#undef UNICODE,因此请确保他调用SQLConnect而不是SQLConnectW。但是问题仍然存在。仍然没有调用我的SQLConnect。
编辑-我尝试添加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,并且它是...
要么调用SQLConnectW并传递实际的SQLWCHAR DSN字符串,要么调用SQLConnectA以显式调用ANSI函数,或者在构建代码时取消定义UNICODE(将#undef UNICODE添加到源代码的顶部,以防止对SQLConnect的调用被静默映射到SQLConnectW 。