我有一个.NET 2.0 COM对象,由VBA在Excel中使用.它在我的开发机器上工作正常,但是当试图在干净的VM工作站上使用它时,我收到此错误:
自动化错误.该系统找不到指定的文件.
该DLL已在"regasm/tlb/codebase mycom.dll"中注册,而不是放在GAC中.我没有VM框的管理权限
有任何想法吗?
是否可以通过COM互操作在.NET对象上调用静态方法?
我知道我可以写一个包装类.如果我不想那样做怎么办?
我在VS中的工具箱中添加了一个.ocx.创建了两个.dll:Interop.NNN.dll,AxInterop.NNN.dll.
每个人是什么?它们都是必需的吗?
任何人都可以解释一下,CComPtr在CC中使用CComQIPtr有什么用?
CComPtr<ISampleInterface> Sample1;
CComQIPtr<ISampleInterface> Sample2;
Run Code Online (Sandbox Code Playgroud) 我在VB6中有一个代码.任何人都可以告诉我如何写它C#.此代码如下:
Set Amibroker = CreateObject("Broker.Application")
Set STOCK = Amibroker.Stocks.Add(ticker)
Set quote = STOCK.Quotations.Add(stInDate)
quote.Open = stInOpen
quote.High = stInHigh
quote.Low = stInlow
quote.Close = stInYcp
quote.Volume = stInVolume
Set STOCK = Nothing
Set quote = Nothing
Run Code Online (Sandbox Code Playgroud)
CreateObjectC#中的等价物是什么?我尝试添加对com对象的引用,但我找不到任何com对象作为Broker.Application或amibroker
我有一个用C#编写的COM可见DLL,我想在VB6应用程序中使用它.我有两个DLL的主要用例,我想知道该/codebase选项何时适用以及何时最好在GAC中注册.
用例:
DLL将被加载到另一台开发人员PC上,并且需要在Project > References菜单下的VB6 IDE中访问
当VB6应用程序发布时,DLL将被加载到生产机器上
有关适当使用的任何信息/codebase都会有所帮助.
谢谢.
我正在研究一个免费的私有注册WinSxS的配置,它提供了简单的程序集清单文件,在部署和运行时将Delphi可执行文件(COM客户端)和.NET(C#)COM可见DLL组合在一起.
我已经研究了MSDN "与非托管代码互操作"中提供的文档,特别是关于" COM Callable Wrapper "和" 如何:为无注册激活配置基于.NET Framework的COM组件 "的部分.
经过一个多星期的研究并在文件不足的情况下(重新)指导,我决定在这里提出我的第一个问题.
计划的部署结构如下所示:
./install-root
????ProgramSuite1
? ????bin
? ? DelphiNativeCOMClient1.exe
? ? DelphiNativeCOMClient1.exe.config
? ? DelphiNativeCOMClient2.exe
? ? DelphiNativeCOMClient2.exe.config
? | ...
? ?
? ????data
? ...
????ProgramSuite2
? ????bin
? ? DelphiNativeCOMClient3.exe
? ? DelphiNativeCOMClient3.exe.config
? ? DelphiNativeCOMClient4.exe
? ? DelphiNativeCOMClient4.exe.config
? | ...
? ?
? ????data
? ...
????SharedLibs
????MyCompany.Libs.Set1
? MyCompany.Libs.Set1.manifest
? SomeManagedCOMServerA.dll
? SomeNativeCOMServerB.dll
? SomeNativeCOMServerC.dll
?
????MyCompany.Libs.Set2
MyCompany.Libs.Set2.manifest
SomeManagedCOMServerB.dll …Run Code Online (Sandbox Code Playgroud) 问题:我有一个.NET dll,我在C++程序中使用它.现在我必须在部署计算机上以编程方式注册dll.
我该怎么做(以编程方式!不使用regasm)?我记得,当我曾经用C++ dll调用VB6 dll时,我不得不使用DllRegisterServer和DllUnregisterServer.
使用.NET dll还是这样吗?
看来我必须以某种方式将dllregisterserver函数添加到.NET dll中.
在一个C#项目中,我收到以下警告:
警告CS1762:由于间接引用由程序集"ALibraryOfMine.dll"创建的程序集,因此创建了嵌入式互操作程序集"Interop.SomeLibrary.dll"的引用.考虑更改任一程序集上的"嵌入互操作类型"属性.
但是,在提供此警告的C#项目中,我没有在COM库引用属性上看到Embed Interop Types属性.这是在VS 2010中.在VS 2008 ALibraryOfMine项目中,同一个COM库也没有Embed Interop Types属性.我怎么能摆脱这个警告?我一直在得到"找到的程序集的清单定义与程序集引用不匹配"错误,我担心可能有不同版本的COM库,因此我想消除与COM相关的错误.
#-*- coding:utf-8 -*-
import win32com.client, pythoncom
import time
ie = win32com.client.DispatchEx('InternetExplorer.Application.1')
ie.Visible = 1
ie.Navigate('http://ieeexplore.ieee.org/xpl/periodicals.jsp')
time.sleep( 5 )
ie.Document.getElementById("browse_keyword").value ="Computer"
ie.Document.getElementsByTagName("input")[24].click()
Run Code Online (Sandbox Code Playgroud)
import win32com.client, pythoncom
import time
ie = win32com.client.DispatchEx('InternetExplorer.Application')
ie.Visible = 1
ie.Navigate('www.baidu.com')
time.sleep(5)
print 'browse_keword'
ie.Document.getElementById("kw").value ="Computer"
ie.Document.getElementById("su").click()
print 'Done!'
Run Code Online (Sandbox Code Playgroud)
当运行第一部分代码时,它将弹出:
ie.Document.getElementById("browse_keyword").value ="Computer"
TypeError: getElementById() takes exactly 1 argument (2 given)
Run Code Online (Sandbox Code Playgroud)
并且第二部分代码运行正常.使结果不同有什么区别?