32位程序访问64位DLL,使用COM组件

64位程序调用32位DLL 最近再把原来写的股票分析程序转换成64位版本,程序中调用了银江的通视数据接口dll,因为银江提供的dll是32位的,但windows下面64位程序并不能直接调用32位的dll,所以只能百度了.         网上有说用进程外com的方式可以,之前从没接触过com,硬着头皮搞了半天,发现了问题,进程外com对于dll提供函数返回值不涉及指针的话没有任何问题,但是如果dll函数返回值是一个指针 阅读详情

一直纠结于微软所谓的32位程序不能访问64位dll或64位程序不能访问32位dll,MSDN上的说明也不能完全理解。


这两天纠结的问题终于需要直面了,有个项目需要转到64位平台上运行(需要超4G内存),但它是用VC6.0开发的,第一反应想到下面几个方式:

1,将VC6.0项目转到VS2005及以上,确实这样做了,报出一堆错误,真心不想debug这个了,太古老了。

2,VC6.0开发64位程序,虽然网上有总总描述(安装windows SDK 2003等等),最终还是放弃了,毕竟VC6.0太老古董了,折腾了伤不起,编译的程序稳定性也不能保证。

3,即使真心转成VS2005以上或VC6.0 64位开发版,某些第三方dll是32位的,不能用了,也找不到源代码,对方也不会再support了。

4,再写个64位的exe进行进程间交互,这种方式想想头都炸了。



艰苦奋斗了一个通宵,使用COM组件的方式终于被我搞定了。太开心了,激励并留念。


具体方式转载别人的,如下:

工作流程:
  1.创建一个进程外COM服务器(EXE)。
  2.将32位dll的接口函数封装为COM服务器的相关接口。
  3.注册COM服务器*.exe /regserver  (注销 *.exe /unregserver)。
  4.64位进程调用32位COM服务器接口,成功。从而曲线实现了64位进程调用32位dll。

  具体步骤:
  我首先创建了一个简单的dll工程,只输出一个函数int c = add(int a,int b); 生成lib和dll
  然后创建一个进程外COM(EXE类型),内部链接dll,添加方法Method: Add(long *c)
  { *c = add(1,2);}编译生成。
  然后注册COM,*.exe /regserver
  最创建一个64位WIN32工程验证64位环境下方法调用是否正确,经验证正确!!!

  结论:以上方法可以解决64位进程调用32位dll的问题

64位程序调用32DLL解决方案 最近做一个.NETCore项目,需要调用以前用VB6写的老程序,原本想重写,但由于其调用了大量32DLL,重写后还需要编译为32位才能运行,于是干脆把老代码整个封装为32DLL,然后准备在64位程序中调用。(注意Windows系统中,先要把DLL注册为COM) 为了实现64位程序调用32DLL,我尝试了大量方法,但效果都不是很理想,偶然中发现.NetCore的“管道”,... 阅读详情

相关推荐

C# 写的32位COM组件,如何在64位系统上注册

之前,用c#写了一个COM组件,可以被Delphi的程序调用,而且已经使用在几个项目中,部署环境在XP和WIN7 32位都可以正常运行. 但最近一个项目,部署环境是WIN7 64位系统.使用写好的bat文件注册不成功, 运行到 RegAsm 时,总时提示 无法定位输入程序集 '....dll'或它的一个依赖项. 看了下RegAsm的命令: %WINDIR%\Microsoft.NE

wangjingboasp的专栏 6333

32bit程序调用64bit dll 的解决办法

32bit程序调用64bit dll 的解决办法 32bit程序不能直接调用64bit的dll,我们采用COM进程外组件的方式来实现间接调用。 简单来说就是编写COM进程外组件,封装64位dll的功能,编译COM组件为64bit版本。 然后32bit的应用程序去调用该COM组件,经过测试成功。具体代码见附件。附件中并没有封装一个64bit的dll,只是写了一个简单的com对象。 COM

shakesky的专栏 7824

64位程序调用32位dll解决方案

8.64位客户端调用:创建测试项目,Project1,编译选项选择x64,包含ATLProject1_i.h和ATLProject1_i.c文件,CoCreateInstance的第三个测试填CLSCTX_LOCAL_SERVER,运行弹出测试窗口,成功!注2:.NET“Any CPU”编译功能允许对x86和x64使用完全相同的二进制文件,但此二进制文件仍需要在所需的注册表端注册,如果需要x86客户端和x64客户端支持,则需要在两个注册表端注册。如果选择DLL,则是in-process,切记不要选错。

tudou23115的专栏 4299

Delphi中加载并运行内存中的EXE

 { ******************************************************* }{ * 从内存中加载并运行exe * }{ ******************************************************* }{ * 参数:

编程资料收集与共享交流 2050

32位程序调用64位 dll解决办法的例子程序

32位程序调用64位 dll解决办法的例子程序

32位程序调用64位dll的例子程序

32bit程序调用64bit dll 的解决办法 32bit程序不能直接调用64bit的dll,我们采用COM进程外组件的方式来实现间接调用。

关于局域网远程调用进程外com组件遇到的问题

4、“COM 安全”页面,点击“访问权限”区域里的“编辑限制”按钮,弹出“访问权限”设置框,添加“Administrators、Everyone、Guests、INTERACTIVE、ANONYMOUS LOGON”账号,允许所有账号的所有权限,点击“确定”按钮。8、“安全”页面,“启动和激活权限”区域,选择“自定义”,点击“编辑”按钮,添加“Administrators、Everyone、INTERACTIVE、ANONYMOUS LOGON”账号,允许所有账号的所有权限,点击“确定”按钮。

qq_36764881的博客 2503

进程外com组件实现win764位软件调用32位库

通过进程外Com组件实现64位程序调用32库(主要实现64位程序调用32Com组件的创建、注册、和调用)

64位进程调用32位DLL详解

公司开发开发环境是64位,在读取一些加密文件时使用了第三方32位DLL。那么问题来了怎样在64位环境下调用32位DLL — — — —开启探索之旅 相关资料: 微软公司的官方网站针对这个问题描述如下: 在64位的windows系统中,一个64位进程不能加载一个32位dll,同理一个32位进程也不能加载一个64位dll。但是,64位windows支持64位和32位进程(包括本机或跨机)间

行走 5万+

iTunes登录协议逆向与自动化实现

本文详细解析了iTunes登录协议的逆向工程与自动化实现方法,涵盖请求体构造、签名生成和会话管理等关键技术。通过XML结构解析、X-Apple-ActionSignature生成原理及完整登录流程实现,帮助开发者高效完成iTunes自动化登录,提升工作效率。

weixin_26938645的博客 939

基于Android平台下的健康管理APP/基于android的健康管理系统

随着网络科技的发展,移动智能终端逐渐走进人们的视线,相关应用越来越广泛,并在人们的日常生活中扮演着越来越重要的角色。因此,关键应用程序的开发成为影响移动智能终端普及的重要因素,设计并开发实用、方便的应用程序具有重要的意义和良好的市场前景。Android技术作为当前最流行的操作平台,自然也存在着大量的应用服务需求。 本课题研究的是基于Android技术平台的健康管理APP,开发这款健康管理APP主要是为了帮助用户可以不用约束时间与地点进行所需信息。本文详细讲述了健康管理APP的界面设计及使用,主要包括界面的

m0_73706453的博客 1438

64位程序调用32位dll

转自:https://blog.csdn.net/yanmanm/article/details/81870436 https://blog.csdn.net/nie2314550441/article/details/49867735 最近在做代码升级64位,因为有些第三方的模块没有源码,所以需要用到64位代码调用32位模块的方案,在网上找了很多资料和方法,最终参考国...

Scarlett_OHara的博客 3998

网格自适应_Comsol案例解析17:自适应网格的使用

本期导读自适应网格细化有许多优势,比如可以不用对网格进行全局加密,增加计算精度,又会降低求解自由度。本期仍然以气泡上升案例为例,在两相流模块中使用自适应网格。【打开案例模型】【修改网格】适当让气泡边界加密,注意,曲率因子越小,曲线上的网格越密【添加自适应网格】使用默认的参数即可,这里的误差指示器用的是水平集phi。可以根据具体求解模型选择适当的自变量作为误差指示器。【口诀】默认的一般是最...

weixin_28726871的博客 5681

使用进程外COM服务在64位应用中调用32位DLL

最近做一个项目,需要在64位的VS2022 c++项目中调用32位的动态库,实现导出docx文件的功能,开始在网上找了一些解决方案,基本都是:创建32位COM组件 -- 注册32位COM组件 -- 64位程序调用32位COM组件,但是按照这些方法封装COM组件后,发现不能调用,客户端使用CoCreateInstance创建对象提示创建COM服务器接口的实例时出现类未注册错误(REGDB_E_CLASSNOTREG Class not registered,查看注册表,计算机\HKEY_LOCAL_MACHI

u011208918的专栏 2139

Fiddler Everywhere保姆级教程:10分钟搞定手机HTTPS抓包(附证书配置避坑指南)

本文提供Fiddler Everywhere移动端HTTPS抓包的保姆级教程,涵盖环境配置、代理设置、证书安装及常见问题排查。重点解析如何正确安装并信任Fiddler根证书以解密HTTPS流量,帮助开发者快速搭建抓包环境,高效分析应用网络行为,提升调试效率。

git9versioner的博客 705

南京邮电大学电工电子实验(二)复习一

本文给电工电子实验(二)的复习进行一些知识点的提醒

YOUXISUN的博客 2959

64位进程调用32位DLL的解决方法

64位进程调用32位DLL的解决方法 最近做在Windows XP X64,VS2005环境下,32位程序编译为64位程序的工作,遇到了一些64位编程中可能遇到的问题:如内联汇编(解决方法改为C/C++代码),long类型的变化,最关键的遇到了64位进程需要调用32位DLL的问题。由于有一些32位DLL没有源代码,无法重新编译为64位DLL,所以只能想办法解决64位进程调用32位DLL问题,这个...

《好好先生》专栏 1万+

超简单的视频换脸,效果相当不错!完全白嫖的技术,来自ComfyUI 官方客户端一键搞定!手把手教会你如何下载安装部署,而且教你如何使用。

如果你电脑上没有安装Visual Studio的C++桌面开发组件,还有Windows应用SDK C++模板,那么你需要自行去下载安装下【安装后默认界面会自动识别系统语言,当然如果你是中文繁体用户,那么你可以在 ComfyUI 的管理器里下载。】并把它放入根目录-models-insightface文件夹内 , 同时下载视频换脸工作流 【分享手把手教你视频换脸,本地部署,轻轻松松当上“电影主角”】,否则insightface无法被正常载入。) 这是换脸必备的工具 ,安装后重启;

TianLeung的博客 2859

64位进程调用32位DLL详解(利用COM)附加QT

Qt中使用ActiveXhttps://www.cnblogs.com/findumars/p/6254060.html Qt 下的COM组件开发https://blog.csdn.net/gaoszzzz/article/details/80324337 64位程序如何调用32位dll(简单解决方案 )https://blog.csdn.net/jiyanglin/article/det...

图像学习之旅 5566

国科大学习资料--遥感原理集图像处理(尤红建)--2019年期末考试

国科大学习资料–遥感原理集图像处理(尤红建)–2019年期末考试 国科大学习资料–遥感原理集图像处理(尤红建)–2019年期末考试 国科大学习资料–遥感原理集图像处理(尤红建)–2019年期末考试 ================================================================== ================================================================== ==============

无名何许人的博客 1470

1、动作捕捉技术:概述与历史

本博文全面介绍了动作捕捉技术的概念、历史演变、类型分类以及完整的工作流程。从早期的连续摄影技术到现代数字动作捕捉系统,文章深入探讨了光学、磁性和机械动作捕捉系统的优缺点及适用场景,并详细解析了动作捕捉数据的生成原理与数学基础。此外,还涵盖了特殊部位如手部、面部和木偶的动作捕捉方法,并讨论了动作捕捉在动画制作、虚拟现实、医疗康复等领域的广泛应用与发展前景。

apple5的专栏 220

64位程序调用32位dll方法

最近接入一个nfc卡程序包,发现了一个问题:由于我们现在的操作系统都已经64位了,而我们开发的程序自然也是64位的,虽然说64位操作系统上可以运行32位程序,但是我们开发就避免不了要调用各种第三方库,而这个nfc库巧了,他是远古遗老只有32位的dll,我们要知道64位程序是不能调用32位dll的(静态库更是不行),问题到这似乎出现的坏味道。还好 互联网大佬 告诉我们可以通过 IPC (进程间通信)也就是64位程序 与 32位程序 通过进程通讯手段进行变相的调用。

qq_59398646的博客 1597

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

VS2010实现64位代码调用32位模块方法

最近在做代码升级64位,因为有些第三方的模块没有源码,所以需要用到64位代码调用32位模块的方案,在网上找了很多资料和方法,最终参考国外的一篇文章解决了问题,原理是应用进程外com实现,具体见参考文献: https://blog.mattmags.com/2007/06/30/accessing-32-bit-dlls-from-64-bit-code/。 现在为了更多的朋友少走弯路,这里把...

yanmanm的博客 9543

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

64位程序如何调用32位dll(简单解决方案 )

因为一些呵呵的原因,我们写64位程序时需要调用32位的dll,或者32位程序需要调用64位的dll 至于为什么64位程序不能调用32位的dll,那是因为......你懂得 项目中我也遇到了这么一个没法回避的问题 看网上有写什么进程外com,没去研究,我用了一个比较简单的方案可以实现 主要就两个方案的结合 1.WM_COPYDATA 2.共享内存 实际的代码

jiyanglin的博客 4万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

python 调用 C++ dll 32位 64位 问题 ctypes.cdll.LoadLibrary

python 调用 C++ dll 32位 64位 问题 ctypes.cdll.LoadLibrary 需要使用 python 调用 第三方厂商提供的库文件, 一个USB接口的小票打印机T532, TxPrnMod.dll TxPrnMod.lib wrapper.dll 一个串口的 读取智能卡的读卡器TTCE_M100, M100_DLL.dll,M100_DLL.lib, 通过 win7 ...

abc 8604

64位系统下用32位程序

在64位系统下,用64位的程序自然是能够充分利用cpu中的64位指令和64位的地址空间,可有的时候,我们却不得不在64位系统下使用32位的程序。 64位和32位 对于64位还是32位,首先要从概念上把其理清,我觉得这可以分为三个层次: 硬件      主要是指CPU的指令集,寄存器,以及地址空间。比如x64体系结构的CPU,就是在32位的基础上添加了64位的操作指令,寄存器,同时提供

三少GG 4249
下一篇: C#上位机通过TCP/IP完全控制YAMAHA四轴机器人开发
swtech_
博客等级 码龄12年 69粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值