如何从x64打开32位OLEDB提示
本文关键字:32位 OLEDB 提示 打开 x64 | 更新日期: 2023-09-27 18:27:16
大家好,
我正在编写一个C#应用程序,它将允许用户动态设置他们想要连接的数据库(我将处理一些数据库数据等,但这并不重要)。重要的是,我允许我的用户使用下面的代码从OLEDB连接到数据存储。
ADODB.Connection connection;
MSDASC.DataLinks instance = new MSDASC.DataLinksClass();
if( (connection = instance.PromptNew() as ADODB.Connection) == null ) return;
这将打开与windows为*.udl文件打开的对话框完全相同的对话框,这正是我想要的。然而,我遇到了一个有趣的问题,你的亮度可能会派上用场:一些客户将不得不浏览x86驱动程序,而绝大多数肯定会使用x64。
我知道您可以使用以下命令行打开x86 UDL文件:"C:''Windows''syswow64''rundll32.exe"C:''Program Files(x86)''Common Files''System''Ole DB''oledb32.dll",OpenDSLFile"C:''myConnectionFile.udl"
当默认(64位)命令为:时
"C:''Program Files''Common Files''System''Ole DB''oledb32.dll",OpenDSLFile"C:''myConnectionFile.udl"
换句话说:windows允许用户以两种方式创建条目。我想在我的应用程序中使用API做同样的事情。我已经考虑过创建一个临时UDL文件并从上面的命令行打开的选项,这让我与技术负责人的对话相当不愉快,所以这不是一个选项。
欢迎所有建议。如果我们做到了这一点,我不会放弃不安全的编码,也不会放弃在C++中构建包装器的想法(尽管我的C++现在已经很生疏了)。
提前感谢大家,编码快乐。。。
各位开发者,
经过一个乏味而漫长的研究过程,我找到了我想要的答案。为了从一个C#64位应用程序中同时使用32位和64位平台的OLEDB提供程序,我需要为32位调用创建一个进程外包装器,并通过IPC(内部进程调用)进行调用。因为我公开的功能数量适中,所以障碍只是在包装器上重新创建一些方法调用。
这个博客帮助我把这些部分放在一起,现在我可以确定我将允许我的用户创建什么类型的OLEDB连接,而且我还可以执行我需要的所有操作,而不管提供商架构如何。
我希望这将有利于其他可能有这个问题的人。
如果时间(和NDA)允许,我会在这里获得代码,供人们复制并稍后尝试。
这些链接对我的研究也很有用
http://blog.mattmags.com/2007/06/30/accessing-32-bit-dlls-from-64-bit-code/
注册代理激活的DLL服务器https://msdn.microsoft.com/en-us/library/windows/desktop/ms686606(v=vs.85).aspx)
编写服务组件https://msdn.microsoft.com/en-us/library/3x37357ez(VS.80).aspx)
如何:创建服务组件https://msdn.microsoft.com/en-us/library/ty17dz7h(VS.80).aspx)
在C#/.Net中创建进程外COM?http://stackoverflow.com/questions/4446417/create-out-of-process-com-in-c-net
感谢大家
D