标签: com-callable-wrapper

如何诊断COM可调用包装器对象创建失败?

我使用以下命令创建一个COM对象(来自本机代码)CoCreateInstance:

const 
   CLASS_GP2010: TGUID = "{DC55D96D-2D44-4697-9165-25D790DD8593}";

hr = CoCreateInstance(CLASS_GP2010, nil, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, IUnknown, out unk);
Run Code Online (Sandbox Code Playgroud)

实际上,我在Delphi中,这意味着我调用了辅助函数:

CreateComObject(CLASS_GP2010);
Run Code Online (Sandbox Code Playgroud)

大部分时间这个功能都成功了.但有时,在同一个可执行文件中,在同一进程中,调用CoCreateInstance失败的原因是:

Unspecified error (0x80004005 = E_FAIL)
Run Code Online (Sandbox Code Playgroud)

再次调用该函数可能会成功,或者可能会失败.没有(明显的)押韵或理由.

这不是我的COM dll

如果这是一个正常的 COM DLL,我写,我就开始把OutputDebugStringDLL_ATTACH,当有人试图打电话DllGetClassObject,我会确认COM是正确加载我的DLL,并且它被正确要求被实例化的类.

不幸的是,它不是COM dll; 它是一个.NET程序集dll.COM子系统并不是简单地 "加载"我的dll.相反,COM被指示加载mscoree.dll:

HKEY_CLASSES_ROOT
   CLSID
      {DC55D96D-2D44-4697-9165-25D790DD8593}
         InprocServer32
            @default = mscoree.dll
Run Code Online (Sandbox Code Playgroud)

mscoree.dll导出所需的GetClassObject功能.那mscoree.dll个人回来了E_FAIL,不是我.故障永远不会发生在我的开发机器上,但始终在客户机器上间歇性地失败.

如何启用.NET日志记录?

问题是,因为mscoree.dll返回的是E_FAIL(而不是任何有用的):我如何告诉我问题是什么?

例如,似乎唯一遇到故障的客户(除了是唯一大量使用COM对象的客户)恰好在Windows XP上.也许他们遇到了.NET框架中的已知错误(版本4之前),您无法在同一进程中加载​​不同版本的.NET运行时 …

.net delphi com ccw com-callable-wrapper

35
推荐指数
1
解决办法
835
查看次数

从vba调用.net库方法

我在ASP.net,c#中开发了一个Web服务,并在IIS上托管,由vba客户端使用.下载了Office 2003 Web Services 2.01工具包后,我遇到了成功创建所需代理类的问题(许多用户在线记录),并决定创建一个.net DLL库.我创建了一个库,它引用了Web服务并将其中一个方法暴露给c#中的公共函数.

我现在有三个问题:

  1. 如何在VBA中引用dll类?我试图去工具 - >引用并浏览到dll位置,但是我收到错误"无法添加对指定文件的引用".磁盘上是否有特定位置我必须复制.dll?

  2. 我还可以复制dll文件旁边的dll.config文件,以便在那里使用端点URL吗?

  3. 由于要调用的方法是接受一个对象(由各种成员和几个List <>成员组成,这些如何在VBA代码中实现?

.net com vba com-callable-wrapper

14
推荐指数
1
解决办法
1万
查看次数

与.NET 4.0无法使用"与其基础RCW分离的COM对象"

我在.NET 3.5 C#WinForms应用程序中有一个类,它有五种方法.每种方法都使用不同的C++ COM接口集.我用Marshal.FinalReleaseCOMObject清理这些COM对象.此代码在此.NET平台上运行正常,没有任何问题.但是,当我将此应用程序移动到.NET 4.0时,我开始在这些方法中的一个中从我ICOMInterface1向其转换变量的行中获取此错误ICOMInterface2,即:

ICOMInterface1  myVar= obj as ICOMInterface2; 
Run Code Online (Sandbox Code Playgroud)

无法使用已与其基础RCW分离的COM对象.

如果我删除使用的行Marshal.FinalReleaseCOMObject,我不会收到此错误.

我在这里错过了什么?如何从.NET 4.0平台上的内存中清除这些非托管COM对象?

c# com com-callable-wrapper

7
推荐指数
1
解决办法
2万
查看次数

标签 统计

com ×3

com-callable-wrapper ×3

.net ×2

c# ×1

ccw ×1

delphi ×1

vba ×1