【问题标题】:How to create DSN from custom ODBC Driver?如何从自定义 ODBC 驱动程序创建 DSN?
【发布时间】:2019-12-20 10:23:20
【问题描述】:

在过去的几周里,我一般都在为 ODBC 苦苦挣扎。取得了一些进展,但现在我被困在使用自定义 ODBC 驱动程序设置 dsn。

我所理解的,翻阅 postgres 开源代码。 我需要制作一个包含两个函数的 dll 1.ConfigDsn 2配置驱动

这是我的代码示例

 #include "pch.h"
 #include <Windows.h>



 BOOL WINAPI DllMain(HANDLE hInst, ULONG ul_reason_for_call, LPVOID lpReserved)
 {


 switch (ul_reason_for_call)
 {
 case DLL_PROCESS_ATTACH:
 case DLL_THREAD_ATTACH:
 case DLL_THREAD_DETACH:
 case DLL_PROCESS_DETACH:
    break;
 }
 return TRUE;
}


 BOOL ConfigDSN(
  HWND     hwndParent,
  WORD     fRequest,
  LPCSTR   lpszDriver,
  LPCSTR   lpszAttributes) {
  MessageBox(NULL, L"TU", L"OVDJE", 0);
  return TRUE;
 }

 BOOL ConfigDriver(
  HWND    hwndParent,
  WORD    fRequest,
  LPCSTR  lpszDriver,
  LPCSTR  lpszArgs,
  LPSTR   lpszMsg,
  WORD    cbMsgMax,
  WORD* pcbMsgOut) {
  MessageBox(NULL, L"TU", L"OVDJE", 0);
  return TRUE;
 }

当我尝试添加新的 DSN 时,没有显示任何消息框。

如果我在 DLLMain 函数中添加消息框调用,则会显示消息框。 我假设我在构建 dll 时缺少基本的 c++ 知识。因为我在 postgres 源代码的资源文件夹中看到了一些 .def 文件。

我的问题是我需要如何制作这个 dll 以便我可以使用我自己的驱动程序创建一个 DSN?

【问题讨论】:

    标签: c++ dll installation odbc


    【解决方案1】:

    由于您正在构建 C++ 代码,因此所有函数名称都将是 mangled。 ODBC 功能可能希望使用未损坏的名称。

    使用extern "C" 防止名称混淆:

    extern "C" BOOL ConfigDSN(...) { ... }
    
    extern "C" BOOL ConfigDriver(...) { ... }
    

    【讨论】:

    • 它没有帮助,但我添加了 .def 文件并在那里添加了功能,一切正常。仍然感谢您的帮助
    猜你喜欢
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-28
    相关资源
    最近更新 更多