COM组件调用动态库路径问题

目前在做一个OFFICE的插件,是用COM组件实现的。
在COM组件中要load另外一个DLL,但是在load这个DLL时总是返回127错误。
现在的情况是OFFICE是一个路径,COM组件与DLL在另外一个目录下。

COM组件加载DLL的代码不贴了,就是LoadLibrary和GetLastError。
新建了一个空的DLL,什么代码也没写,让COM去加载,还是127错误。

感觉是路径问题,但是尝试把当前路径加到path中,不起作用。
把dll复制到system32或者SysWOW64下也不行。
把dll复制到office安装路径也不行。

现在不知道该怎么处理了。

请问大家在使用COM组件加载DLL时遇到过这样的问题吗?

另外,新建一个空的DLL,用win32程序可以加载,但是COM加载也是127错误。

代码如下:

 HINSTANCE hInstance = LoadLibrary(_T("E:\\code\\test\\2016103101\\Debug\\DLLTest1.dll"));
    DWORD dRet = GetLastError();
0

3个回答

用depends查看一下DLL的依赖,一般是有其他依赖的DLL缺少,导致加载失败

0
oyljerry
oyljerry com的mfc。线程模型等是否跟dll一样
接近 3 年之前 回复
keke_zkt
小鸟向前飞 新建一个空的DLL,用win32程序可以加载,但是COM加载也是127错误。空DLL不存在依赖问题吧?
接近 3 年之前 回复

你搞个release版的dll就行了

0
keke_zkt
小鸟向前飞 不管用
接近 3 年之前 回复

用depends查看一下DLL的依赖,一般是有其他依赖的DLL缺少,导致加载失败

-2
keke_zkt
小鸟向前飞 新建一个空的DLL,用win32程序可以加载,但是COM加载也是127错误。空DLL不存在依赖问题吧?
接近 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
c++如何采用com组件的方法直接调用动态库
com组件方法调用dll
C++和C#相互调用COM组件
通过com组件实现c++和c#接口通信,网上的文章不少,只是示例没人上传,我当回雷锋,送给众多懒人们:)
PHP调用C++动态库
主要的功能是实现PHP调用C++的动态库,C++动态库使用的是COM组件来创建的
上传word文档并读取word调用com组件遇到的问题
开始写上传文档并读取的的时候是调用com组件,中间遇到了很多坑,总结一下//传文档所在路径 返回文档内容 public string Doc2Text(string docFileName) { //实例化COM Microsoft.Office.Interop.Word.ApplicationClass wordApp = new Microsoft.Office.Interop.Word
Golang调用windows下的dll动态库中的函数
Golang调用windows下的dll动态库中的函数 使用syscall调用。package mainimport ( "fmt" "syscall" "time" "unsafe" )const ( MB_OK = 0x00000000 MB_OKCANCEL = 0x00000001 MB
QT调用Delphi生成的COM组件
    COM(Component Object Model),是微软的一种组件对象模型,ActiveX、DirectX以及OLE等都是基于COM建立起来的,它是开发软件组件的一种方法,多个COM组件对象可以连接起来以形成应用程序或组件系统,并且组件可以在运行时、在不重新链接或编译应用程序的情况下被卸载或替换,因此,具有很大的灵活性。    在COM中,接口就是一切,它完全与语言无关,只要它遵循接...
pb调用C#中COM组件实例(源码+运行EXE)
pb调用C#中COM组件实例(源码+运行EXE) 说明 http://blog.csdn.net/tangkechu/article/details/37593911
labview调用dll动态库的方法
举例说明labview调用dll动态库的方法和注意事项。
C#封装COM,C++调用
开题:已给C#编译的动态库,需要将模块集成到软件中。由于原有的软件版本较老(VC6.0开发),只提供了C#的DLL库,尝试许多方法失败,最后采取的方法是:将C#的DLL库使用C#封装成COM组件,以便C++来调用。一、封装COM1、创建工程    在C#工程里,选择“类库”创建完成后有几点注意:    ID可以使用VS里面“工具->创建DUID”COM互操作选上,以便生成***.tlb文件(...
C# .net WindowsForm创建快捷方式动态调用com组件无需额外带DLL
收藏的一个动态调用com组件创建快捷方式的方法,此方法真正的无需额外调用DLL文件,不需要再程序目录里带上Interop.IWshRuntimeLibrary.dll。真正做到单文件创建快捷方式,也不是调用VB脚本,找了很久才找到的,特此分享出来
COM组件的调用(COM001)的资源
COM组件的调用(COM001) COM组件的调用(COM001) COM组件的调用(COM001) COM组件的调用(COM001)
解决IIS对COM组件的访问异常
在C#操作word或者Excel,我们可能会用到微软内置的COM组件,会出现很多问题。 如:在本地调试导出Excel没有问题,发布到IIS就有问题了,检测到的异常: 我们会发现在iis上运行的程序,没有打开word的进程。 因为你vs是管理员权限,而iis没有权限。 所以这要提高iis的权限。 启动IIS,应用程序池-“选定的应用程序池”-高级设置-进程模拟-标识: 选择自
c# 进程内com组件实现
一.com组件编写    1.打开VS2013创建一个项目        2.设置项目属性    添加签名   3.编写开放接口和方法 ,添加类文件Main.csusing System; namespace MyComIn { public interface MyInterface { int add(int a, int b); } pub...
COM技术内幕--引用计数及动态链接
引用计数简介 AddRef 和 Release实现的是一种名为引用计数的内存管理技术。引用计数是使组件能够自己将自己删除的最简单同时效率最高的方法。COM组件维护一个称作是引用计数的数值。当客户从组件取得一个接口时,此引用计数值将增1。当客户使用完某个接口后,组件的引用计数值将减1。当引用计数值为0时,组件即可将自己从内存中删除。 规则: 1)在返回之前调用AddRef。对于那些
将vb文件使用C#封装成com组件调用
1、新建一个类库项目 2、将Class1.cs改为我们想要的名字(例如:MyClass.cs) 问是否同时给类改名,确定 3、修改Properties目录下面的AssemblyInfo.cs   ComVisible属性设置为true 改成下图 4、项目->MyLib属性 切换到“生成”选项卡,在底部位置,勾选“为COM互操作注册” 切换到“签名...
托管平台与非托管的互操作
COM组件的调用和使用问题; 非托管代码调用托管代码
CB调用COM组件
CB调用COM组件 COM BCB 调用CB调用COM组件 COM BCB 调用
网站COM组件调用失败解决办法
网站需要对Office文件进行操作,在VS运行的时候一切正常,但是发布到IIS上,一直报错:COM组件调用失败 解决方法: 在配置节中加上一行 <identity impersonate="true" userName="administrator" password="密码"/> 问题原因 网站的权限不足以调用COM组件。 ...
C# 使用Com组件正确的释放方法
public static void ReleaseComObject(object obj) { int result = 0; do { result = Marshal.ReleaseComObject(obj); } while (result > 0); } 或者 public static void ...
java调用动态库时,.dll文件路径问题
网上说”.dll”应该放在”.class”同级目录下,但经测试,程序报错: “java.lang.UnsatisfiedLinkError: no JniDllDemo in java.library.path” 当放到java工程同级目录时,一个例子可以调用: 当我调用vtk测试用例时,却又显示“no java.library.path”。后期这样解决的: 1.右击项目,从弹出的右
Python加载动态库问题汇总
1.出现ValueError: Procedure probably called with too many arguments可能是约定不同,使用错了调用动态库的方法;cdecl格式的调用要用ctypes.cdll.LoadLibrary('dllpath')或者ctypes.CDll('dllpath')stdcall格式的调用要用ctypes.windll.LoadLibrary('dll...
在网页中使用COM组件(或activex控件)中的一些常见问题
在网页中使用COM组件(或activex控件)中的一些常见问题1. 在页面中插入控件<object id=“idname” classid="clsid:XXXXX"> </object> **2. 使用控件中的事件**方法1:function ok(){ } document.getElementById('idname').attachEvent('Event
php开启com组件注意事项
网上已经有很多教程了,我也遇到过这个问题,但是有一个很重要的点其他文章里提到了,但说法不准确。    很多文章说PHP VERSION5.4.5  不需要在PHP.ini中配置extension=php_com_dotnet.dll。这是官方说法,但是我遇到过PHP 5.3.28不配置就不能调用com组件,具体原因我没去找。 我想说的是,如果你们按照其他文章配置好后,还是不能调用CO
.Net创建Com组件、注册Com组件/java 引用.net dll程序集
先了解下几个知识点 1 java环境是无法直接引用.net程序集dll的 2 Com组件是啥?Com组件与语言无关,是平台之间中的动态链接,简单的理解,就是.Net环境中配置版的dll程序集 创建Com组件 1.创建接口配置文件等 新建项目,添加引用,按照以下代码格式封装接口 2.设置配置 1)项目-&amp;gt;属性 切换到“生成”选项卡,在底部位置,勾选“为COM互操作注册” 2)...
Linux下动态库的加载路径问题
问题产生背景 libiconv.so.2: cannot open shared object 验证root账户 root账户登录验证没有问题,那就是权限问题 vim /etc/ld.so.conf 查看是否有用户的动态库加载路径,如果存在删除即可 最后在命令行ldconfig 动态库路径加载顺序 1.编译目标代码时指定的动态库搜索路径; 2.环境变量LD_LIBRARY_PAT...
COM组件原理
在COM中,接口就是一个象类,每个接口有一个接口ID(uuid)。一个COM组件通常是连续继承下来的类,比如 IUNknow ->IDispath->IXX->CXX。这就形成了一个COM组件,当然组件一般是一个钻石继承的样子,这里为了简化原理把他们当成一个串形继承下来。 每个COM组件都有一个CLSID(uuid),这个CLSID是注册的时候写进注册表的。这样就可以通过查询注册表中的CLSID
C#通过COM组件调用C++的代码(转载)
一.通过ALT建立COM组件 1、创建ATL Project 步骤1:建立一个解决方案。    步骤2:在 该解决方案中,新建一个 vc++ 的 ATL 项目。见下图 选择Dynamic-link library(DLL) 2、向工程中添加ATL对象 选择ATL Simple Object 名字为FunTest
java 用swt调用com组建之ie组建加强版
首先因为是调用ie的组建,所以有些机器默认的不是ie,就可能无法直接获取。所以有两点需要做的,1是设置ie为默认浏览器,2是先开一下ie。 先说一下,这个代码是通过进程调用,也可以理解为java进程和ie进程之间的通信。 另外,一些代码也是学习重用了网上的一些代码,但还是做了一些修改。 最后的效果是,打开一个自己预先写的网页,3秒钟之后会自动点击网页上的一个按钮,将html预先的值写入一个t...
多接口COM组件的调用(COM002)
多接口COM组件的调用(COM002) 多接口COM组件的调用(COM002) 多接口COM组件的调用(COM002)
VFP调用C#编写的DLL控件
因为VFP出来时还没有.NET,所以VFP不支持.NET,C#编写出来的DLL控件需要转换成系统COM组件,才能够被VFP调用,当然不仅仅局限于C#与VFP之间的调用,各种语言都有自己写COM组件的方法。 下面就先介绍下,关于VFP与C#之间的联系 第一步:C#编写COM组件 1、新建一个类库项目 2、将Class1.cs改为我们想要的名字(例如:MyClass.cs) ...
如何使用C++创建COM组件(ATL项目)
使用C++新建ATL项目,并实现调试测试。
java com串口组件调用实例
java com串口组件调用实例jajava com串口组件调用实例va com串口组件调用实例
如何用ATL写一个C++的COM组件(C#轻松调用C/C++接口)
似乎关于COM的ALT中文教程不多 自己研究了下 现在奉献给大家 若大家有兴趣 会接着继续讲下去哦~~~
32位程序访问64位DLL,使用COM组件
一直纠结于微软所谓的32位程序不能访问64位dll或64位程序不能访问32位dll,MSDN上的说明也不能完全理解。 这两天纠结的问题终于需要直面了,有个项目需要转到64位平台上运行(需要超4G内存),但它是用VC6.0开发的,第一反应想到下面几个方式: 1,将VC6.0项目转到VS2005及以上,确实这样做了,报出一堆错误,真心不想debug这个了,太古老了。 2,VC6.0开发6
COM组件调用.rar
COM组件调用.rarCOM组件调用.rarCOM组件调用.rar
.NET程序连接OPC Server时出错 对 COM 组件的调用返回了错误 HRESULT E_FAIL
最近在给鹿华系统做升级,为了实时性和稳定性,程序直接从DCS取数,程序是.NET开发的,调用OPC的DLL是OPCDAAuto.dll 系统装的是Windows Server 2003 R2,配置好DCOM,初次尝试成功连接OPCServer,程序10秒取数一次,在运行30小时后就再也连不上OPCServer了 错误如下 对 COM 组件的调用返回了错误 HRESULT E_FAIL
C#引用COM组件调用Matlab
C#引用COM组件调用Matlab,可以实现图像嵌入C#,能操作Matlab实现大多数功能,本例子实现了显示正弦图,显示三维螺旋线图等5种操作。 本人习惯vb.net编程,从vb.net转过来,vb.net不需要引用即可 引用COM组件Matlab Application(Version 8.3) Type Library//根据自己安装的版本引用
sqlserver 2008 r2数据导入问题:报错“对COM组件的调用返回了错误HRESULT E_FAIL”
搜索出的解决方案是启动和配置DTC服务,确保“Distributed Transaction Coordinator”服务是开启的且允许操作权限,大费周章的一顿操作之后还是不解决问题。最后发现是微软对文件大小做了限制,后续搜索发现确实如此。 SQL server 2008打开脚本文件超过80M就报错了。 解决方法是用sqlcmd方法执行sql语句。在cmd窗口输入下面命令: sqlcmd -...
求解一元四次方程(vb,vc,c#,excel,html)-16.10.15
使用 VC++ 编写一元四次方程求解的核心代码,生成动态库、静态库、COM组件、.NET组件,然后使用 vb、vc、c#、excel、html 调用。
c++ 调用com组件步骤
实现步骤具体如下: 1、保证com组件注册成功; 2、#import "对应的com组件DLL"      using namespace 命名空间; 或者 no_namesapace; 3、从注册表中找到对应的CLSID      CLSID clsid;       HRESULT hr = CLSIDFromProgID(OLESTR("注册表中对应com组件实现类"), &cl