Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从自定义ODBC驱动程序创建DSN?_C++_Dll_Installation_Odbc - Fatal编程技术网

C++ 如何从自定义ODBC驱动程序创建DSN?

C++ 如何从自定义ODBC驱动程序创建DSN?,c++,dll,installation,odbc,C++,Dll,Installation,Odbc,在过去的几周里,我一直在努力解决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 lpR

在过去的几周里,我一直在努力解决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;
 }
#包括“pch.h”
#包括
BOOL WINAPI DllMain(HANDLE hInst,ULONG ul_原因,LPVOID lpReserved)
{
开关(ul\u呼叫原因\u)
{
案例DLL\u进程\u附加:
案例DLL\u线程\u连接:
案例DLL\u线程\u分离:
案例DLL\u进程\u分离:
打破
}
返回TRUE;
}
布尔配置(
HWND hwndParent,
词频,
LPCSTR LPSZ驱动程序,
LPCSTR(LPSZ属性){
消息框(空,L“TU”,L“OVDJE”,0);
返回TRUE;
}
布尔配置驱动程序(
HWND hwndParent,
词频,
LPCSTR LPSZ驱动程序,
LPCSTR lpszArgs,
LPSTR lpszMsg,
单词cbMsgMax,
WORD*pcbMsgOut){
消息框(空,L“TU”,L“OVDJE”,0);
返回TRUE;
}
当我尝试添加新DSN时,没有任何消息框显示。

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


我的问题是我需要怎样做这个DLL,这样我就可以用自己的驱动程序创建一个DSN?

< p>因为你正在构建C++代码,所有的函数名都会被调用。ODBC函数可能希望使用未损坏的名称

使用
extern“C”
防止名称损坏:

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

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

它没有帮助,但我添加了.def文件,并在那里添加了function,一切正常。还是谢谢你的帮助