Mik*_*ail 5 c++ windows com 32bit-64bit
我有一个32位DLL,旨在通过com模型和关联的tlb文件进行访问。
DLL似乎是x86。
有什么办法可以从x64程序访问这种DLL?TLB文件x86 / x64是否不可知?
我问是因为某些功能似乎起作用,其他功能崩溃了,还没有??是??失踪??c?o?m?p?a?r?e?d??至??t?h?e??。?净??a?s?s?e?m?b?l?i?e?s?。
- 编辑 -
由于OEM方面的错误而出现缺少的程序集。
在大多数情况下,类型库肯定是与平台无关的。Microsoft在Windows编程中遇到的大多数人都是。在.NET中最明显的是,这使得编写可以在AnyCPU平台目标公开的32位或64位模式下运行的代码变得非常简单。使用Microsoft.Office.Interop中的interop类或编写在Office程序中运行的扩展不需要任何特殊操作,您使用完全相同的类型库。
但是,当您使用由程序员创建的类型库(从来没有认为它可以在64位代码上运行)时,效果并不总是那么好。最典型的麻烦是由方法参数引起的,该方法参数实际上是底层的指针,但已展平为整数类型,长期以来一直是典型选择。这些指针值在64位模式下为64位宽,当您尝试将它们填充到32位整数中时表现不正常。HANDLE值是一个很好的例子。
迄今为止,最臭名昭著的哎呀是微软。ADO的类型库已损坏,这是一种数据库提供程序库,已广泛用于与dbase引擎进行通讯。他们在Windows 7 SP1中进行了重大更改,这一更改在程序员在该操作系统中构建程序并发现它不再适用于旧版Windows时引起广泛的痛苦。糟糕的是,这种类型在64位操作系统上应该是32位,但在64位OS上被声明为64位。当您拥有Windows SDK版本8,adoint_Backcompat.h头文件(ADO_LONGPTR类型)时,可以看到此消息。在adoint.h中由long代替。
最好与原始程序员合作,以解决此问题。或利用COM代理,当从64位进程调用时,它们可以在进程外运行32位代码。