有没有可能使用注册免费的COM与Dotnet互操作和C#?如果是的话,如何在C#项目中添加对COM对象的引用?注册免费COM与C#互操作,可能吗?
我有一个免费的ATL COM服务器DLL与一个嵌入式清单和两个测试客户端,一个CPP其他C#。 CPP的客户端正确地引用使用导入语句,要么
#pragma comment(linker, "\"/manifestdependency:type='win32' name='TestComSvr2' version='1.0.0.0'\"")
或设定“附加清单依赖”到COM对象“类型=‘的win32’名称=‘TestComSvr1’版本=‘1.0.0.0’”接头下 - > Manifest File选项,之后只要COM组件位于同一目录中,cpp客户端就可以正常运行。
虽然c#客户端拒绝播放。
尝试的文件引用添加到或者未登记的COM组件DLL或未注册TLB导致错误:
"A reference to 'blah blah' could not be added. Please make sure that the file is accessible, and that it is a valid assembly or COM component".
注册只是类型库与“Regtlib来TestComSvr”,然后创建一个文件或COM参照导致的C#项目未能建立与:
"Error loading type library/Dll. (Exception from HRESULT: 0x80029C4A (TYPE_E_CANTLOADLIBRARY))".
注册COM组件,并在C#项目通常建立一个基准,设定基准,以隔离,建立C#项目,然后注销该组件运行在该异常的C#项目的结果:
Retrieving the COM class factory for component with CLSID {B1D0A80F-0050-4856-BACD-87D664E58CBE} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
注:即使这个工作它不会是一个有用的情况下,无论如何,因为最终它仍然需要组件的注册,我只是测试它彻底性。
到目前为止,我一直能够从C#中引用COM对象的唯一方法是注册COM对象本身,这当然完全击败了这一点,从此它完全不是无reg的。
任何人有任何想法?
(这是在VSXX SP1的WinXP上)。
想知道你是否需要为visual studio exe本身创建一个清单文件?找到这个链接,但不知道这是否有帮助http://msdn.microsoft.com/en-us/library/ms973913.aspx – PeskyGnat 2012-03-06 15:37:08
另外,如果你创建一个互操作DLL与tlbimp和参考?即'tlbimp'? –
PeskyGnat
2012-03-06 15:56:48