使用 64 位 DLL 和 32 Borland C++建设者
我需要创建一个超过 4GB 数据的“数据池”,组织为二维数据数组:
我有一个用 32 位 CodeGear 2009 C++ Builder 制作的 50 个表单应用程序,其中包含许多第三方 VCL 组件 - 因此现在实际上不是一个选择迁移到 Visual Studio 2010(暂时)。
这个想法是使用包含数据数组的64位DLL(用Visual Studio 2010?或Delphi EX2?) - 这个想法是使用数组中数据位置的x,y参数调用64位DLL,并且DLL返回数组中的值。
有人以前做过这样的吗?是否可以从 C++ Builder 调用 64 位 DLL,在运行时动态加载 DLL 的初始化代码会是什么样子?
任何意见都非常感谢,因为这是一个表演的阻碍。
I need to make a "data pool" of more than 4GB data, organized as 2 dimensional data arrays:
I have a 50 forms application made in 32bit CodeGear 2009 C++ Builder with many third party VCL components - thus not really an option right now to migrate to Visual Studio 2010 ( for now ).
The idea is to use a 64Bit DLL ( made with Visual Studio 2010 ? Or Delphi EX2 ? ) containing the data arrays - the idea is to call the 64bit DLL with x,y parameters of the data location in the array, and the DLL returns the value from the array.
Anyone have made such before ? Is it possible to call a 64Bit DLL from C++ Builder, how would the init code look like for dynamically loading the DLL at runtime ?
Any input is very much appreciated, as this is a show stopper.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
考虑到您列出的限制,您的最佳选择是使用进程外 COM 服务器。您的 32 位 C++Builder 应用程序无法加载 64 位模块。这是一个无法绕过的硬限制。这为您提供了某种形式的进程间通信,并且进程外 COM 将是最容易编码的。
Your best option, given the constraints you list, is to use an out-of-proc COM server. Your 32 bit C++Builder app cannot load 64 bit modules. That's a hard limitation that cannot be bypassed. This leaves you with some form of inter-process communication and out-of-proc COM will be the easiest to code.
32 位程序无法加载 64 位 DLL。 DLL 被加载到正在运行的进程中,整个进程是 32 位或 64 位的。您最多可以创建一个单独的 64 位应用程序并从 32 位应用程序启动它;然后你可以让两者以你喜欢的任何方式进行交流。 这是如何IIS 能够让 64 位 Windows 使用 32 位 DLL 为 Web 应用程序提供服务。
A 32-bit program cannot load a 64-bit DLL. DLLs are loaded into the running process, and it's the process as a whole that's 32 or 64-bit. You could, at best, create a separate 64-bit application and launch that from your 32-bit application; you could then make the two communicate in pretty much whatever way you like. This is how IIS is able to let 64-bit Windows serve web applications using 32-bit DLLS.