大家好日子,
我正在编写一个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 ++现在不方便生锈)。
提前感谢大家和快乐的编码...
答案 0 :(得分:0)
开胃菜的好伙伴们,
经过繁琐漫长的研究过程后,我找到了我正在寻找的答案。 为了从单个C#64位应用程序使用OLEDB提供程序用于32位和64位平台,我需要为32位调用创建一个进程外包装器,并通过IPC(内部进程调用)进行调用。因为我暴露的功能数量适中,所以阻碍只是在包装器上重新创建了一些方法调用。
This blog帮助我将各部分组合在一起,现在我能够确定我允许用户创建的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/3x7357ez(VS.80).aspx)
如何:创建服务组件 https:// msdn.microsoft.com/en-us/library/ty17dz7h(VS.80).aspx)
在C#/ .Net中创建进程外COM?http:// stackoverflow.com/questions/446417/create-out-of-process-com-in-c-net
谢谢大家
d