当我尝试运行Oleview时,我收到一条错误,说DllRegisterServer因IViewer.dll而失败(抱歉我想发布截图但我不能直到获得10点声望= p)
Oleview会运行,但就像msg所说的那样,你无法查看接口,而这正是我想做的事情.
我找到了我的iviewer.dll并运行了regsvr32就好了.所以我不确定是什么意思.
我正在尝试使用Python中的COM对象(win32com)来自动化进程,但是我没有得到预期的结果......是否有工具来探索/测试COM对象而无需编写特定的程序?我的意思是,是否存在允许例如实例化COM对象并调用其方法的东西?
(基本上我试图找出我的意外结果是否是win32com的错,我想避免安装Visual Studio来编写C#应用程序)
我有一个通过COM Interop调用的托管程序集.像VBScript客户端,Perl客户端等.
课程装饰有
[ClassInterface(ClassInterfaceType.AutoDual)]
[GuidAttribute("ebc25cf6-9120-4283-b972-0e5520d0000E")]
[ComVisible(true)]
Run Code Online (Sandbox Code Playgroud)
然后当然我做了regasm的事情,所有方法都运行得很好.
但是程序集中也有枚举类型.我想使用符号名称COM应用程序,用于枚举值.
如何通过COM互操作公开枚举?我只需要添加这些属性吗?
[GuidAttribute("ebc25cf6-9120-4283-b972-0e5520d0000E")]
[ComVisible(true)]
Run Code Online (Sandbox Code Playgroud)
然后,我如何在VBScript中引用这些符号名称?我没有看到OleView中的枚举类型.(我应该?)我在OleView中看到了所有其他类型.
类型库声明由应用程序或动态链接库 (DLL) 公开的类、接口、常量和过程。类型库通常是程序文件中的资源;它也可以是扩展名为 .tlb 或 .olb 的独立二进制文件。
那么是否有可能某些 DLL 仍然公开接口而没有被声明为 TypeLib。
实际上,我试图从 oleview 打开一个 dll 并显示错误消息“错误加载类型库”。
根据我的理解,如果我们有从 DLL 公开的接口,那么它应该由 oleview 打开,否则它不能有公开的接口或函数。
任何可能我们有dll暴露接口并且仍然无法被Oleview查看的可能性。
我需要延迟绑定到3.5 C#应用程序中的第三方VB6 COM对象(以避免我们当前拥有的版本依赖项).由于某些错误在我们尝试正常使用时导致错误,因此提供的dll在大多数非后期方式中都不可使用.目前,我们正在使用一个自定义的VB6包装器,它使得VERY特定于版本,但是我发现我可以使用后期绑定来访问属性和方法.现在,我试图延迟绑定到事件,但是我读到的所有内容都说我需要从COM包装器的接口继承来创建所需的事件接收器.这是一篇这样的文章.
所以,我的问题是,是否有可能在编译时没有引用dll的情况下执行后期绑定事件处理?
UPDATE
以下是我对VB6包装器的错误(仍在积极更新).
无法反编译所选项目错误加载类型库/ DLL.TYPE_E_CANTLOADLIBRARY($ 80029C4A)
无法确定COM引用"3rdPartyDLL"的依赖项.加载类型库/ DLL时出错.(来自HRESULT的异常:0x80029C4A(TYPE_E_CANTLOADLIBRARY))
有谁知道从类型库(.tlb)生成 idl 文件的命令行工具?这样做的原因是为了去掉 regasm 生成的枚举值中的下划线。本博客讨论了枚举中下划线的问题
http://blogs.artinsoft.net/mrojas/archive/2010/05/17/interop-remove-prefix-from-c-enums-for-com.aspx
我知道 OLEView 可以生成 IDL 文件,但我正在寻找适合自动构建的解决方案。
都:
指定了上述内容,并使用:
返回由上面的CLSID指定的类的单个未初始化对象.
那我如何从C++访问Interface的方法呢?无:
之后,我使用CreateInstance()
我遇到了麻烦,使用CreateInstance() - 最后一个参数 - ppv
使用oleview,我可以看到上面指定的IID上面的IID的方法,例如:
interface IS8Simulation : IDispatch {
HRESULT Open([in] BSTR FileName);
};
Run Code Online (Sandbox Code Playgroud)
我怎样才能访问上面的内容?示例/指导 - 请
问候