无法从.net框架调用atlcom对象
Unable to call an ATL COM object from .NET framework
我有一个名为Test的COM对象,.rgs文件如下所示。我确实看到这个类注册在注册表中的位置HKEY_LOCAL_MACHINE>>SOFTWARE>>Classes>>CLSID。
HKCR
{
NoRemove CLSID
{
ForceRemove {17899D17-698D-4781-894C-3BAA80F3D4BB} = s 'Test Class'
{
ForceRemove 'Programmable'
InprocServer32 = s '%MODULE%'
{
val ThreadingModel = s 'Apartment'
}
val AppID = s '{D2A47892-4C98-11D6-8C6D-00105A1790CD}'
'TypeLib' = s '{9A887890-4C99-11d6-8C6D-00105A1790CD}'
}
}
}
当我在c++项目中创建这个对象的实例时,它工作得很好。使用的代码是:
ATLTRACE( _T( " | CoCreateInstance Testn" ) );
hr = m_Test.CoCreateInstance(CLSID_Test, NULL, CLSCTX_INPROC_SERVER);
if (FAILED(hr))
CREATE_COM_OBJECT_ERROR(_T("Test"));
然而,当我试图从。net应用程序调用这个对象时,它错误地说"类型为'System.Runtime.InteropServices '的未处理异常"。在PatternEditor.exe中出现COMException
附加信息:灾难性失败(Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))"。使用的代码如下:
public partial class MainWindow : Window
{
Main m_Main = new Main();
Test m_Test;
public MainWindow()
{
InitializeComponent();
//This line errors
m_Test = m_Main.Test;
}
}
通常,在。net中使用COM对象最简单的方法是在项目中创建一个引用(选项卡COM)。它将生成一个"存根",你可以作为简单的。net代码使用。
另一种方法是通过反射。这个答案有一个想法:c# COM和附加事件
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 函数调用中参数的顺序重要吗
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在c++类上调用void函数
- 为什么 std::unique 不调用 std::sort?
- 调用专用模板时出错"no matching function for call to [...]"
- 选择要调用的构造函数
- C++为什么尽管我调用了void函数,它却不起作用
- 构造函数正在调用一个使用当前类类型的函数
- 变量没有改变?通过向量的函数调用
- 没有为自己的结构调用列表推回方法
- 调用'begin(int [n])'没有匹配函数
- 什么时候调用析构函数
- 如何用参数值调用函数(仅在运行时已知)
- std::cout.imbue()多重调用
- 无法从.net框架调用atlcom对象