标签: ccw

如何诊断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
查看次数

如何将.tlb作为资源文件嵌入到.NET程序集DLL中?

我们通过COM(CCW)在本机C++中使用.NET Assembly DLL.每当我制作我的DLL的新版本时,我必须向在其代码中使用它的工作人员发送两个文件(.dll和相应的.tlb).

是否可以将.tlb文件作为.NET DLL文件中的资源嵌入?

.net c# com dll ccw

13
推荐指数
1
解决办法
7875
查看次数

.NET COM Callable Wrapper如何生成IID?

通过OLE/COM对象查看器查看由CCW创建的生成的TLB文件显示IID保持不变,除非我更改了界面的设计(这是正确的行为),我担心的是如果我在另一台机器上编译相同的代码尽管接口没有改变,因此将生成完全不同的IID,从而破坏现有的COM客户端.

  1. COM Callable Wrapper如何生成COM接口ID?
  2. CCW如何知道接口是否已更改并需要生成新的IID?
  3. 在源文件中生成自己的并声明是否更安全?

.net c++-cli ccw

8
推荐指数
1
解决办法
441
查看次数

如何使用Visual Studio 2008安装项目中的regasm注册.NET CCW

我有一个.NET服务应用程序的安装项目,它使用一个.NET组件,它公开了一个COM接口(COM可调用包装器/ CCW).要使组件在目标计算机上运行,​​必须在其中注册

regasm.exe/tlb/codebase component.dll

在这种情况下,生成类型库的/ tlb开关是必需的,否则我无法从该组件创建对象.

问题是,如何配置我的Visual Studio 2008安装项目以通过调用regasm/tlb来注册此程序集?

installation registration ccw visual-studio-2008

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

如何在Ring处理程序中打印到REPL窗口?

(defn app [request]
  (println "test")
  {:body "Hello World"})

(defonce server (run-jetty #'app {:port 8080 :join? false}))
Run Code Online (Sandbox Code Playgroud)

println似乎在处理程序中不起作用.如何写入REPL窗口?

我逆时针使用eclipse.

编辑:这看起来像nrepl问题.(future (println "foo"))很好,但没有输出(.start (Thread. #(println "foo"))).

clojure ccw ring

6
推荐指数
1
解决办法
892
查看次数

使用COM注册托管程序集而不使用GAC

我想知道是否可以使用COM注册程序集而无需向GAC注册.我们需要部署一些使用CCW暴露给经典asp的.net库.但部署是一场噩梦.

.net com com-interop ccw asp-classic

5
推荐指数
1
解决办法
607
查看次数

用CounterClockwise和Eclipse评估Clojure REPL

我通常使用Emacs但受到启发再次尝试CCW + Eclipse.我有一个带有源文件src/user.clj的Clojure测试项目,其中包含以下内容:

(ns user)

(println "hi")
Run Code Online (Sandbox Code Playgroud)

我有一个REPL,我开始使用Window-> Show View-> Other-> Clojure Views-> REPL.

当我选择println表达式(全部为'(println"hi")')并按下Command-enter时,表达式本身会在REPL窗口中回显,但不会发生输出.与'(取10(范围))'等表达式相似.

如果我直接在REPL中键入表达式,然后按Enter,我就会得到

=> (take 10 (range))
Run Code Online (Sandbox Code Playgroud)

但似乎没有任何额外的评估结果.

谢谢你的任何想法.我查看了文档,但没有任何明显的东西跳出来.

eclipse clojure ccw

4
推荐指数
1
解决办法
2350
查看次数

ccw算法说明

我在理解 ccw(逆时针)算法时遇到了一些麻烦:

int ccw (Point P0, Point P1, Point P2) {
    dx1 = P1.x - P0.x;
    dx2 = P2.x - P0.x;
    dy1 = P1.y - P0.y;
    dy2 = P1.y - P0.y;

    if (dy1 * dx2 > dy2 * dx1) return -1;
    if (dx1 * dy2 > dy1 * dx2) return 1;
    if ((dx1 * dx2 < 0) || (dy1 * dy2 < 0)) return 1;
    if ((dx1 * dx1 + dy1 * dy1) < (dx2 * dx2 + dy2 * …
Run Code Online (Sandbox Code Playgroud)

c++ ccw

3
推荐指数
1
解决办法
3792
查看次数