初始化 COM 对象的问题
Issue with initializing COM object
我编译了以下 VB 代码并得到了 dll ("TestVB.dll") 和 tlb ("TestVB.tlb") 文件作为输出。
Imports System
Imports System.Runtime.InteropServices
Namespace TesterNS
<ComVisible(True),
Guid("4B673F5A-A953-4C20-9A90-8F94ED2F6DDF"),
InterfaceType(ComInterfaceType.InterfaceIsIDispatch)>
Public Interface _Tester
Function GetMonth() As Integer
End Interface
<ComVisible(True),
Guid("FEC833EE-37E9-4406-9344-8A8BD5C43B07"),
ClassInterface(ClassInterfaceType.None),
ProgId("Tester.Numbers1")> Public Class Tester
Implements _Tester
Public Tester()
Public Function GetMonth() As Integer Implements _Tester.GetMonth
GetMonth = DateTime.Now.Month
End Function
End Class
End Namespace
我选择了
Register for COM interop
VB 项目的项目设置中的选项。
我正在尝试从 C++ 代码访问上述功能。
我在 C++ 的 stdafx.h 文件中包含了以下导入语句。
#import "TestVB.tlb" no_function_mapping, no_namespace, named_guids
并尝试按如下方式访问 COM 对象:
HRESULT hr = CoInitialize(NULL);
_TesterPtr t1 = NULL;
CLSID cls;
std::string s = "";
bool flag = false;
hr = CLSIDFromProgID(L"Tester.Numbers1", &cls);
if (SUCCEEDED(hr))
{
hr = CoCreateInstance(cls, NULL, CLSCTX_INPROC_SERVER, __uuidof(_Tester), (void**)&t1);
if (SUCCEEDED(hr))
s = "success";
else
s = "fail";
}
我在进行 CoCreateInstance
调用后看到 hr = REGDB_E_CLASSNOTREG Class not registered
错误。
我不确定我做错了什么。
在我的 C++ 应用程序中,在 CoInitialize(NULL)
之前调用了 AfxOleInit()
。如果我删除对 CoInitialize(NULL)
的调用,我就能让它正常工作。
我编译了以下 VB 代码并得到了 dll ("TestVB.dll") 和 tlb ("TestVB.tlb") 文件作为输出。
Imports System
Imports System.Runtime.InteropServices
Namespace TesterNS
<ComVisible(True),
Guid("4B673F5A-A953-4C20-9A90-8F94ED2F6DDF"),
InterfaceType(ComInterfaceType.InterfaceIsIDispatch)>
Public Interface _Tester
Function GetMonth() As Integer
End Interface
<ComVisible(True),
Guid("FEC833EE-37E9-4406-9344-8A8BD5C43B07"),
ClassInterface(ClassInterfaceType.None),
ProgId("Tester.Numbers1")> Public Class Tester
Implements _Tester
Public Tester()
Public Function GetMonth() As Integer Implements _Tester.GetMonth
GetMonth = DateTime.Now.Month
End Function
End Class
End Namespace
我选择了
Register for COM interop
VB 项目的项目设置中的选项。
我正在尝试从 C++ 代码访问上述功能。 我在 C++ 的 stdafx.h 文件中包含了以下导入语句。
#import "TestVB.tlb" no_function_mapping, no_namespace, named_guids
并尝试按如下方式访问 COM 对象:
HRESULT hr = CoInitialize(NULL);
_TesterPtr t1 = NULL;
CLSID cls;
std::string s = "";
bool flag = false;
hr = CLSIDFromProgID(L"Tester.Numbers1", &cls);
if (SUCCEEDED(hr))
{
hr = CoCreateInstance(cls, NULL, CLSCTX_INPROC_SERVER, __uuidof(_Tester), (void**)&t1);
if (SUCCEEDED(hr))
s = "success";
else
s = "fail";
}
我在进行 CoCreateInstance
调用后看到 hr = REGDB_E_CLASSNOTREG Class not registered
错误。
我不确定我做错了什么。
在我的 C++ 应用程序中,在 CoInitialize(NULL)
之前调用了 AfxOleInit()
。如果我删除对 CoInitialize(NULL)
的调用,我就能让它正常工作。